Como usar get_template_part ()?
-
-
Tente olhar 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 respostas
- votos
-
- 2012-02-08
Algumas respostasintrodutóriasmuitoboas aqui.
Basicamente,
get_template_part()
permite que os desenvolvedorestemáticos configurem uma ordem deespecificidade de arquivos demodelo. Pensenisso demaneira semelhante àespecificidade,pois se aplica aos seletores CSS. Aoprojetar algo,você quer começar com omínimo deespecificidade,para quepossa serfacilmente substituídoem partes de um design queprecisa de atençãoindividual.Então,porexemplo,vocêestá denominando umbloge cria um arquivo loop.php quefuncionabem paramarcação deposts. Mas vocêplanejaem frente,e você o chamaem seus arquivos demodelomaistarde comespecificadores de contexto adicionais - digamos,napágina de índice,você chama
get_template_part( 'loop', 'index' );
,no singlemodelo,você chamaget_template_part( 'loop', 'single' );
,em páginas de arquivo,você chamaget_template_part( 'loop', 'archive' );
,e assim sobre. Issotornamuitofácil aestrada quando você decidirmarcar o loopem suaspáginas de arquivo demaneira diferente dapáginainicial:basta criar ummodelo loop-archive.php e ele será usadoem vez de ogenérico loop.php .Mas amagiaportrás
get_template_part()
estánafunçãolocate_template()
,que verificaprimeiro o diretóriotemático,então o diretóriopai (seexiste)para o arquivonomeado. Isso émuito útilpara o desenvolvimento doplugin. Em um dosmeusplugins,defino umtipo depostagempersonalizadoe criei um arquivo demodelo de loopparaessetipo depostpersonalizadono diretório domeuplugin. Maseu queropermitir quetemas usandomeupluginpara substituirminhamarcação seelesescolherem. É aqui quelocate_template()
realmentefuncionamaravilhas.locate_template($template_names, $load = false, $require_once = true )
procurará cada um dosnomesnamatriz $ Template_namesno diretório deestilo deestilo,em seguida,no diretório demodelo. Passando 'True' como o argumento de $ cargas significa queele será oprimeiro arquivoencontradoe retornará uma string vazia senenhum arquivo demodelofoi localizado. Entãoeupossofazer algo assimnomeuplugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
... o que devetornarmuitofácilpara que os desenvolvedorestemáticospersonalizem omeuplugin apenasincluindo um arquivo chamado loop-mycustomposttype.php em seutema.
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.
-
Substitua Locate_Templateporeste,porfavor. `Incluir (localate_template ('loop-mycustomesttype.php'))` Destaforma épossívelpassar variáveis. Eu acheiisso aqui [link] (http://keithdevon.com/passing-varialbles-to-get_template_part-in-wordpress/).Éextremamente ú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
-
Fazendoisso,seránecessáriomudarisso setambém.Comoeste `if (False===incluir (localate_template ('loop-mycustomosttype.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,bomponto.Com afórmula queeu dei,a chamada `exige` ou` requer_once` chamada (de `location_template`)está dentro de umafunçãoe,portanto,nãotem acesso aoescopo atual.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
Nemtodos os laços,o loopprincipal. ;-) Nãoimporta se você olhapara o seufrontpage ou uma categoria ou whoknowswhat,você sempreterá um loopprincipal. O conteúdo desse loopprincipal é determinadopela consulta quefoiexecutado antes Seumodelofoi chamado.
Omodelo loop.php éexecutado apenas sobre ositensno loope osformata. Veja a documentaçãono Codex .
Se você olharpara vintee dez's loop.php,vocêpode ver que vintee dezentão diversifica dentro esse arquivo demodelo único.
get_template_part()
carrega apenas umapeça demodeloe éexecutada através dela. Vocêpode simplesmenteextrairpartes do seu loop.phpem arquivos separadose substituí-lospor umget_template_part('loop', 'category')
e assimpor diante.ou vocêpoderiater ummodelo depeçapara cadapostindividualno loope ter seu loop.php apenas ligue
get_template_part('loop','post');
dentro dowhile...
cláusula. Tudo até você.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
apartir do get_template_part codex :
.
<?php get_template_part( 'loop', 'index' ); ?>
fará umphpexigir ()para oprimeiro arquivo queexiste ...
Tãoefetivamentefuncionará como se vocêestivesseexigindo outro arquivo PHP.
update : há uma ligeira diferençapara 'exigir' - éembrulhado dentro de umafunção,então você deve
global
se você quiserpassar qualquer variáveis do seumodeloparasuapartemodelo.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.
Alguémpoderiame explicar comoestafunçãofunciona?Eu sei o quefaz,mas quandoeu olhopara o código-fontenomodelotwenty_ten,não recebo comotodos os loopsestão sendo coletadosem um único loop.php (eu viesse arquivotambém).
Então,comoporexemplo resumiu uma determinadaparte comum domodeloe,em seguida,reutilizá-loem outrosmodelos?