¿Cómo incluir un archivo usando get_template_part () en un complemento?


13

Puede ser una pregunta muy simple, pero estoy luchando. En el desarrollo de temas, trabajé get_template_part()muchas veces y entiendo sus conceptos básicos. Pero cuando estoy desarrollando un complemento, me preguntaba si lo usaba y me mostraba algunos errores:

Aviso: Uso de la constante STYLESHEETPATH ​​constante - supuesta 'STYLESHEETPATH' en la ...\wp-includes\template.phplínea 407

y

Aviso: Uso de la TEMPLATEPATH constante indefinida : se supone 'TEMPLATEPATH' en la ...\wp-includes\template.phplínea 410

Buscar en Google el problema mostró una solución de soporte:

Pero eso parece una gran solución, lo dudo. Creo que eso no debería ser muy complicado. Revisé esta respuesta de WPSE y encontré esta línea de código:

if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
    include( 'loop-mycustomposttype.php' );

Donde hay una include()función PHP . Según mi conocimiento de WordPress, aprendí a preferir get_template_part()a PHP include(). Entonces, ¿cómo puedo usar un simple get_template_part()en mi complemento?

No estoy usando ningún bucle o algo, solo estoy separando (o puede decir que organizando) mi código de complemento en diferentes archivos, de modo que en algunos casos, simplemente los comentaré para que no sean necesarios. Lo intenté:

get_template_part( 'my', 'special-admin' );

y luego del error, lo cambió a:

get_template_part( 'my', 'specialadmin' );

Pero sabes que ese no es el problema. Estoy en el servidor local, usando WAMP.

Respuestas:


11

get_template_partEs una función temática . No puede cargar archivos de complemento con esa función. Eche un vistazo a la fuente y notará que el trabajo está hecho por locate_template. Mire esa fuente y verá que siempre se carga desde los directorios de temas .

Por mucho que quieras usarlo get_template_part, es una función incorrecta.

Necesitarás includetus archivos.

La razón, por lo que me parece, get_template_partes permitir que los temas se extiendan, es decir, para facilitar la creación de temas secundarios. Los complementos no están destinados a extenderse de esa manera, por lo que no hay necesidad get_template_partde ningún complemento equivalente.


6

@s_ha_dum es correcto, get_template_partes una función de tema, pero es incorrecto que los complementos no estén destinados a extenderse de esta manera. Es simplemente más complicado.

Esta publicación de Pippin describe cómo usar una función que hará el trabajo de cargar sus plantillas de complementos, al tiempo que permite a los usuarios anular sus plantillas de complementos dentro de su tema.

Esencialmente, se ve en una carpeta especial en el tema, luego, si no se encuentra allí, se busca dentro de la carpeta de plantillas para el complemento.


4

Como se dijo antes, no se puede usar get_template_parten complementos, pero hay una clase práctica en Github (creada por Gary Jones) que imita la get_template_partfuncionalidad en los complementos, agregando el complemento al respaldo (tema secundario> tema principal> complemento).

De esta manera, puede anular la "parte de plantilla" de su complemento dentro de un tema secundario o un tema principal.

Uso (tomado de las instrucciones del repositorio de Github):

  1. Copia class-gamajo-template-loader.phpen tu plugin. Puede estar en un archivo en la raíz del complemento, o mejor, en un directorio de inclusión.
  2. Cree un nuevo archivo, como class-your-plugin-template-loader.php, en el mismo directorio.
  3. Crea un classarchivo en ese archivo que se extienda Gamajo_Template_Loader.
  4. Anule las propiedades de clase para adaptarse a su complemento. También podría anular el get_templates_dir()método si no es adecuado para usted.
  5. Ahora puede crear una instancia de su clase de cargador de plantillas personalizadas y usarla para llamar al get_template_part()método. Esto podría estar dentro de una devolución de llamada de código corto, o algo que desea que los desarrolladores de temas incluyan en sus archivos.

Código de ejemplo:

// Template loader instantiated elsewhere, such as the main plugin file.
$meal_planner_template_loader = new Meal_Planner_Template_Loader;

// Use it to call the get_template_part() method. This could be within 
// a shortcode callback, or something you want theme developers 
// to include in their files.
$meal_planner_template_loader->get_template_part( 'recipe' );

// If you want to pass data to the template, call the set_template_data() 
// method with an array before calling get_template_part().        
// set_template_data() returns the loader object to allow for method chaining.
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data );
    ->get_template_part( 'recipe' );

// The value of bar is now available inside the recipe template as $data->foo.
// If you wish to use a different variable name, add a second parameter 
// to set_template_data():
$data = array( 'foo' => 'bar', 'baz' => 'boom' );

$meal_planner_template_loader
    ->set_template_data( $data, 'context' )
    ->get_template_part( 'recipe', 'ingredients' );

// The value of bar is now available inside the recipe template as $context->foo.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.