¿Cómo usar get_template_part ()?

23

¿Podría alguien explicarme cómo funciona esta función? Sé lo que hace, pero cuando veo el código fuente en la plantilla twenty_ten, no entiendo cómo se recopilan todos los bucles en un solo loop.php (también vi ese archivo).

Entonces, ¿cómo, por ejemplo, abstraer una determinada parte común de la plantilla y luego reutilizarla en otras plantillas?

    
pregunta Amit Erandole 21.02.2011 - 17:17

3 respuestas

21

Algunas respuestas introductorias muy buenas aquí.

Básicamente, get_template_part() permite a los desarrolladores de temas configurar un orden de especificidad de los archivos de plantilla. Piénselo de manera similar a la especificidad, ya que se aplica a los selectores de CSS. Al diseñar algo, desea comenzar con el mínimo de especificidad, para que pueda ser fácilmente anulado en partes de un diseño que requieren atención individual.

Así, por ejemplo, estás diseñando un blog y creando un archivo loop.php que funciona bien para marcar publicaciones. Pero planea con anticipación y luego lo llama en sus archivos de plantilla con especificadores de contexto adicionales; por ejemplo, en la página de índice, llama a get_template_part( 'loop', 'index' ); , en la plantilla única, llama a get_template_part( 'loop', 'single' ); , en las páginas de archivo, llama a get_template_part( 'loop', 'archive' ); , y así sucesivamente. Esto lo hace muy fácil cuando decide marcar el bucle en sus páginas de archivo de manera diferente a la página de inicio: simplemente cree una plantilla loop-archive.php y se usará en lugar de el loop.php genérico.

Pero la magia detrás de get_template_part() está en la función locate_template() , que verifica primero el directorio del tema, luego el directorio principal (si existe) para el archivo nombrado. Esto es muy útil para el desarrollo de plugins. En uno de mis complementos, defino un tipo de publicación personalizada y creé un archivo de plantilla de bucle para ese tipo de publicación personalizada en mi directorio de complementos. Pero ... quiero permitir que los temas que usan mi complemento anulen mi marca, si así lo desean. Aquí es donde locate_template() realmente hace maravillas.

locate_template($template_names, $load = false, $require_once = true )

buscará cada uno de los nombres en la matriz $ template_names en el directorio de la hoja de estilo, luego en el directorio de la plantilla. Pasar 'verdadero' como el argumento $ load significa que requerirá el primer archivo encontrado, y devolverá una cadena vacía si no se encuentra un archivo de plantilla. Así que puedo hacer algo como esto en mi complemento:

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

... lo cual, con suerte, debería hacer que los desarrolladores de temas puedan personalizar mi complemento simplemente con la inclusión de un archivo llamado loop-mycustomposttype.php en su tema.

    
respondido por el goldenapples 08.02.2012 - 18:13
5

No todos los bucles, el bucle principal. ;-) No importa si miras tu página de inicio o una categoría o lo que sea, siempre tendrás un bucle principal. El contenido de ese bucle principal está determinado por la consulta que se ejecutó antes de que se haya llamado a su plantilla.

La plantilla loop.php simplemente se ejecuta sobre los elementos del bucle y los formatea. Consulte la documentación en el Codex .

Si miras el bucle.php de Twenty-Ten, puedes ver que Twenty-Ten luego diversifica dentro de esa única plantilla de archivo.

get_template_part() simplemente carga una parte de la plantilla y la ejecuta. También puede extraer partes de su loop.php en archivos separados y reemplazarlos por un get_template_part('loop', 'category') y así sucesivamente las llamadas.

O podría tener una plantilla parcial para cada publicación individual en el bucle y hacer que su loop.php solo llame a get_template_part('loop','post'); dentro de la cláusula while... . Todo depende de ti.

    
respondido por el wyrfel 21.02.2011 - 17:38
3

De la get_template_part codex :

  

<?php get_template_part( 'loop', 'index' ); ?>

     

hará un requerimiento de PHP () para el primer archivo que existe ...

De manera efectiva, funcionará como si estuvieras necesitando otro archivo php.

Actualización : hay una ligera diferencia en "requerir": está dentro de una función, por lo que debe global si desea pasar alguna variable de su plantilla a la parte de su plantilla.

    
respondido por el icc97 08.02.2012 - 12:02

Lea otras preguntas en las etiquetas