¿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 se recopilan todos los bucles en un solo loop.php (yo 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?

Comentarios

Respuesta

Aquí hay algunas respuestas introductorias muy buenas.

Básicamente, get_template_part() permite a los desarrolladores de temas establecer un orden de especificidad de los archivos de plantilla. Piense en ello de manera similar a especificidad que se aplica a los selectores de CSS. Al diseñar algo, debe comenzar con el mínimo de especificidad, de modo que pueda anularse fácilmente en las partes de un diseño que necesitan atención individual.

Por ejemplo, , estás diseñando un blog y creas un bucle Archivo .php que funciona bien para marcar publicaciones. Pero planifica con anticipación y lo llama en sus archivos de plantilla más tarde 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 hace que sea muy fácil en el futuro cuando decida marcar el bucle en sus páginas de archivo de manera diferente a la página de inicio: simplemente cree un loop-archive.php plantilla y «se utilizará en lugar del loop.php genérico.

Pero la magia detrás de get_template_part() está en la función locate_template(), que comprueba primero el directorio del tema, luego el directorio principal (si uno existe) para el archivo llamado. Esto es muy útil para el desarrollo de complementos. 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 para permitir que los temas que usan mi complemento anulen mi marcado si así lo desean. Aquí es donde locate_template() realmente funciona de maravilla.

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 la directorio tardío. Pasar «true» como el argumento $ load significa que requerirá el primer archivo encontrado y devolverá una cadena vacía si no se encuentra ningún archivo de plantilla. Entonces puedo hacer algo como esto en mi complemento:

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

… lo que, con suerte, debería facilitar que los desarrolladores de temas personalicen mi complemento con solo incluir un archivo llamado loop-mycustomposttype.php en su tema.

Comentarios

  • Reemplace location_template por esto, por favor. include(locate_template( 'loop-mycustomposttype.php')) De esta forma es posible pasar variables. ' he encontrado este enlace aquí. ¡Es ' extremadamente útil!
  • Si lo hace, será ' necesario cambiar esto también. Así if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Oh, buen punto. Con la fórmula que di, la llamada require o require_once (de locate_template) está dentro una función y, por lo tanto, no ' no tiene acceso al alcance actual.

Respuesta

No todos los bucles, el bucle principal. 😉 No importa si miras tu página principal o una categoría o quién sabe qué, siempre tendrás un bucle principal. El contenido de ese bucle principal está determinado por la consulta que se ha ejecutado antes su plantilla fue llamada en absoluto.

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

Si observa el loop.php de Twenty-Ten, puede ver que Twenty-Ten luego diversifica dentro ese único archivo de plantilla.

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 reemplácelos por un get_template_part("loop", "category") y así sucesivamente.

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

Respuesta

Del get_template_part codex :

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

hará un require () de PHP para el primer archivo que existe …

De manera tan eficaz, funcionará como si necesitara otro archivo php.

Actualización : Hay una ligera diferencia con «require»: está envuelto dentro de una función, por lo que debe global si desea pasar cualquier variable de su plantilla a su parte de plantilla.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *