¿Cómo usar get_template_part()?
¿Podría alguien explicarme cómo funciona esta función? Sé lo que hace, pero cuando miro el código fuente en la plantilla twenty_ten, no entiendo cómo todos los bucles se están recopilando en un único loop.php (también vi ese archivo).
Entonces, ¿cómo puedo, por ejemplo, abstraer una determinada parte común de una plantilla y luego reutilizarla en otras plantillas?

Aquí hay algunas respuestas introductorias muy buenas.
Básicamente, get_template_part()
permite a los desarrolladores de temas establecer un orden de especificidad de archivos de plantilla. Piensa en ello de manera similar a la especificidad como se aplica a los selectores CSS. Al diseñar algo, quieres comenzar con el mínimo de especificidad, para que pueda ser fácilmente sobrescrito en partes de un diseño que necesiten atención individual.
Por ejemplo, estás diseñando un blog y creas un archivo loop.php que funciona bien para marcar publicaciones. Pero planeas con anticipación y lo llamas en tus archivos de plantilla más tarde con especificadores de contexto adicionales; digamos, en la página de índice, llamas get_template_part( 'loop', 'index' );
, en la plantilla individual, llamas get_template_part( 'loop', 'single' );
, en las páginas de archivo, llamas get_template_part( 'loop', 'archive' );
, y así sucesivamente. Esto facilita mucho las cosas más adelante cuando decides marcar el bucle en tus páginas de archivo de manera diferente a la página de inicio: solo crea una plantilla loop-archive.php y se usará en lugar del genérico loop.php.
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 plugins, defino un tipo de publicación personalizado y creé un archivo de plantilla de bucle para ese tipo de publicación personalizado en mi directorio de plugin. Pero... quiero permitir que los temas que usan mi plugin sobrescriban mi marcado si 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 el arreglo $template_names en el directorio de hoja de estilos, luego en el directorio de plantilla. Pasar 'true' como argumento $load significa que requerirá el primer archivo encontrado, y devolverá una cadena vacía si no se ubicó ningún archivo de plantilla. Entonces puedo hacer algo como esto en mi plugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) )
include( 'loop-mycustomposttype.php' );
...lo que debería hacer que sea muy fácil para los desarrolladores de temas personalizar mi plugin simplemente incluyendo un archivo llamado loop-mycustomposttype.php en su tema.

Reemplaza locate_template por esto, por favor.
include(locate_template( 'loop-mycustomposttype.php'))
De esta manera es posible pasar variables. Lo encontré aquí enlace. ¡Es extremadamente útil!

Al hacerlo será necesario cambiar también este if. Así if ( false === include(locate_template( 'loop-mycustomposttype.php')) )

No todos los bucles, el bucle principal. ;-) No importa si miras tu portada, una categoría o cualquier otra cosa, siempre tendrás un bucle principal. El contenido de ese bucle principal está determinado por la consulta que se ejecutó antes de que tu plantilla fuera llamada.
La plantilla loop.php simplemente recorre los elementos del bucle y les da formato. Consulta la documentación en el Codex.
Si miras el loop.php de Twenty-Ten, puedes ver que Twenty-Ten luego diversifica dentro de ese único archivo de plantilla.
get_template_part()
simplemente carga una parte de la plantilla y la ejecuta. También puedes extraer partes de tu loop.php en archivos separados y reemplazarlos con llamadas como get_template_part('loop', 'category')
y así sucesivamente.
O podrías tener una plantilla parcial para cada publicación individual en el bucle y hacer que tu loop.php solo llame a get_template_part('loop','post');
dentro de la cláusula while...
. Todo depende de ti.

Del codex de get_template_part:
<?php get_template_part( 'loop', 'index' ); ?>
hará un require() de PHP para el primer archivo que exista...
Así que efectivamente funcionará como si estuvieras requiriendo otro archivo php.
Actualización: Hay una ligera diferencia con 'require' - Está envuelto dentro de una función por lo que debes usar global
si quieres pasar cualquier variable desde tu plantilla a tu parte de plantilla.
