¿Cómo usar get_template_part ()?
-
-
Intentemirar http://codex.wordpress.org/Function_Reference/get_template_partTry look at http://codex.wordpress.org/Function_Reference/get_template_part
- 1
- 2011-02-21
- wow
-
3 respuestas
- votos
-
- 2012-02-08
Algunas respuestasintroductoriasmuybuenas aquí.
Básicamente,
get_template_part()
permite a los desarrolladores detemasestablecer un orden deespecificidad de los archivos deplantilla. Pienseen ello demanera similar a laespecificidad que se aplica a los selectores de CSS. Al diseñar algo,debe comenzar conelmínimo deespecificidad,demodo quepueda anularsefácilmenteen laspartes de un diseño quenecesitan atenciónindividual.Porejemplo,estás diseñando unblog y creas un archivo loop.php quefuncionabien paramarcarpublicaciones. Peroplanifica con anticipación,y lo llamaen sus archivos deplantillamástarde conespecificadores de contexto adicionales;porejemplo,en lapágina de índice,llama a
get_template_part( 'loop', 'index' );
,en el sencilloplantilla,llama aget_template_part( 'loop', 'single' );
,en laspáginas de archivo,llama aget_template_part( 'loop', 'archive' );
,y asíen. Esto hace que seamuyfácilen elfuturo cuando decidamarcarelbucleen suspáginas de archivo demanera diferente a lapágina deinicio: simplemente cree unaplantilla loop-archive.php y se usaráen lugar deel loop.php genérico.Pero lamagia detrás de
get_template_part()
estáen lafunciónlocate_template()
,que compruebaprimeroel directorio deltema,luegoel directoriopadre (siexiste)parael archivo llamado. Estoesmuy útilparael desarrollo de complementos. En uno demis complementos,defino untipo depublicaciónpersonalizada y creé un archivo deplantilla debucleparaesetipo depublicaciónpersonalizadaen mi directorio de complementos. Pero ... quieropermitir que lostemas que usanmi complemento anulenmi marcado si así lo desean. Aquíes dondelocate_template()
realmentefunciona demaravilla.locate_template($template_names, $load = false, $require_once = true )
buscará cada uno de losnombresen lamatriz $template_namesen el directorio de la hoja deestilo,luegoen el directorio de laplantilla. Pasar 'true' comoel argumento $ load significa que requerirá elprimer archivoencontrado,y devolverá una cadena vacía sino seencuentraningún archivo deplantilla. Entoncespuedo hacer algo comoestoen mi complemento:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
... lo que,con suerte,deberíafacilitarmucho a los desarrolladores detemas lapersonalización demi complemento con soloincluir un archivo llamado loop-mycustomposttype.php en sutema.
Some very good introductory answers here.
Basically,
get_template_part()
allows theme developers to set up an order of specificity of template files. Think of it similarly to specificity as it applies to CSS selectors. When designing something, you want to start with the bare minimum of specificity, so that it can be easily overridden in parts of a design that need individual attention.So for example, you're styling a blog and you create a loop.php file which works well for marking up posts. But you plan ahead, and you call it in your template files later with additional context specifiers - say, on the index page, you call
get_template_part( 'loop', 'index' );
, on the single template, you callget_template_part( 'loop', 'single' );
, on archive pages, you callget_template_part( 'loop', 'archive' );
, and so on. This makes it very easy down the road when you decide to mark up the loop on your archive pages differently from the home page: just create a loop-archive.php template and it'll be used rather than the generic loop.php.But the magic behind
get_template_part()
is in the functionlocate_template()
, which checks first the theme directory, then the parent directory (if one exists) for the file named. This is very useful for plugin development. In one of my plugins, I define a custom post type and created a loop template file for that custom post type in my plugin directory. But... I want to allow themes using my plugin to override my markup if they choose. This is wherelocate_template()
really works wonders.locate_template($template_names, $load = false, $require_once = true )
will look for each of the names in the $template_names array in the stylesheet directory, then in the template directory. Passing 'true' as the $load argument means that it will require the first file found, and will return an empty string if no template file was located. So I can do something like this in my plugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
...which should hopefully make it very easy for theme developers to customize my plugin just by including a file called loop-mycustomposttype.php in their theme.
-
Reemplace location_templateporesto,porfavor. `incluir (ubicar_template ('loop-mycustomposttype.php'))` Deestaformaesposiblepasar variables. Encontréesto aquí [enlace] (http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/).¡Esextremadamente útil!Replace locate_template by this, please. `include(locate_template( 'loop-mycustomposttype.php'))` This way is possible to pass variables. I've found this here [link](http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/). It's extremely useful!
- 2
- 2014-01-09
- Pablo S G Pacheco
-
Al hacerlo,seránecesario cambiarestotambién.Deestamanera `if (false===include (Locate_template ('loop-mycustomposttype.php')))`Doing so it's going to be necessary to change this if also. Like this `if ( false === include(locate_template( 'loop-mycustomposttype.php')) ) `
- 1
- 2014-01-09
- Pablo S G Pacheco
-
Oh,buenpunto.Con lafórmula que di,la llamada `require` o` require_once` (de `Locate_template`)está dentro de unafunción ypor lotantonotiene acceso al alcance actual.Oh, good point. With the formula I gave, the `require` or `require_once` call (from `locate_template`) is inside a function and so doesn't have access to the current scope.
- 1
- 2014-01-10
- goldenapples
-
- 2011-02-21
Notodos losbucles,elbucleprincipal. ;-) Noimporta simirastupáginaprincipal o una categoría o quién sabe qué,siempretendrás unbucleprincipal. El contenido deesebucleprincipalestá determinadopor la consulta que se haejecutado antes que se haya llamado atuplantilla.
Laplantilla loop.php simplemente seejecuta sobre loselementos del ciclo y losformatea. Consulte la documentación del Codex .
Si observael loop.php de Twenty-Ten,puede ver que Twenty-Ten luego se diversifica dentro deese único archivo deplantilla.
get_template_part()
simplemente carga unaparte de laplantilla y laejecuta. Tambiénpuedeextraerpartes de su loop.phpen archivos separados y reemplazarlospor unget_template_part('loop', 'category')
y así sucesivamente.Opodríatener unaplantillaparcialpara cadapublicaciónindividualen elbucle y hacer que su loop.php solo llame a
get_template_part('loop','post');
dentro delwhile...
cláusula. Todo depende deti.Not all loops, the main loop. ;-) No matter if you look at your frontpage or a category or whoknowswhat, you'll always have a main loop. The content of that main loop is determined by the query that's been run before your template got called at all.
The loop.php template merely runs over the items in the loop and formats them. See the documentation at the Codex.
If you look at Twenty-Ten's loop.php, you can see that Twenty-Ten then diversifies within that single template file.
get_template_part()
merely loads a template part and runs through it. You can just as well extract parts of your loop.php into separate files and replace them by aget_template_part('loop', 'category')
and so on calls.Or you could have a part-template for each individual post in the loop and have your loop.php only call
get_template_part('loop','post');
within thewhile...
clause. All up to you. -
- 2012-02-08
Del get_template_part codex :
<?php get_template_part( 'loop', 'index' ); ?>
hará un require () de PHPparaelprimer archivo queexiste ...
Demaneratanefectiva,funcionará como sinecesitara otro archivophp.
Actualización : hay una ligera diferenciaen 'requerir':estáenvuelto dentro de unafunción,por lo que debe
global
si deseapasar cualquier variable de suplantilla asuparte deplantilla.From the get_template_part codex:
<?php get_template_part( 'loop', 'index' ); ?>
will do a PHP require() for the first file that exists...
So effectively it will work as if you were requiring another php file.
Update: There is a slight difference to 'require' - It is wrapped inside a function so you must
global
if you want to pass any variables from your template to your template part.
¿Podría alguienexplicarme cómofuncionaestafunción?Sé lo que hace,pero cuandomiroel códigofuenteen laplantillatwenty_ten,noentiendo cómo se recopilantodos losbuclesen un solo loop.php (también viese archivo).
Entonces,¿cómo,porejemplo,abstraer una determinadaparte común de laplantilla y luego reutilizarlaen otrasplantillas?