Comment utiliser get_template_part ()?
-
-
Essayez de regarder 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 réponses
- votes
-
- 2012-02-08
Quelquestrèsbonnes réponsesintroductivesici.
Fondamentalement,
get_template_part()
permet aux développeurs dethèmes de définir un ordre de spécificité desfichiersmodèles. Pensez-y de lamêmemanière que la spécificité qui s'applique aux sélecteurs CSS. Lorsque vous concevez quelque chose,vous voulez commencer avec le strictminimum de spécificité,afin qu'ilpuisse êtrefacilement remplacé dans lesparties d'un design quinécessitent une attentionindividuelle.Parexemple,vous stylisez unbloget vous créez unfichier loop.php quifonctionnebien pour lebalisage des articles. Mais vousplanifiez à l'avance,et vous l'appelez dans vosfichiers demodèleplustard avec des spécificateurs de contexte supplémentaires -parexemple,sur lapage d'index,vous appelez
get_template_part( 'loop', 'index' );
,sur le singletemplate,vous appelezget_template_part( 'loop', 'single' );
,sur lespages d'archive,vous appelezget_template_part( 'loop', 'archive' );
,et ainsi sur. Celafacilite latâche lorsque vous décidez demarquer laboucle sur vospages d'archive différemment de lapage d'accueil: créez simplement unmodèle loop-archive.php et il sera utiliséplutôt que le loop.php générique.Mais lamagie derrière
get_template_part()
est dans lafonctionlocate_template()
,qui vérifie d'abord le répertoire duthème,puis le répertoireparent (s'ilen existe un)pour lefichiernommé. Ceciesttrès utilepour le développement deplugins. Dans l'un demesplugins,je définis untype depublicationpersonnaliséet créé unfichier demodèle debouclepour cetype depublicationpersonnalisé dansmon répertoire deplugins. Mais ...je veux autoriser lesthèmes utilisantmonplugin à remplacermonbalisage s'ils le souhaitent. C'est là quelocate_template()
fonctionne vraiment àmerveille.locate_template($template_names, $load = false, $require_once = true )
cherchera chacun desnoms dans letableau $template_names dans le répertoire desfeuilles de style,puis dans le répertoire desmodèles. Passer «true» comme argument $ load signifie qu'il nécessitera lepremierfichiertrouvé,et renverra une chaîne vide si aucunfichiermodèlen'a été localisé. Doncje peuxfaire quelque chose comme ça dansmonplugin:
if ( '' === locate_template( 'loop-mycustomposttype.php', true, false ) ) include( 'loop-mycustomposttype.php' );
... ce qui devrait,espérons-le,permettre aux développeurs dethèmes depersonnalisertrèsfacilementmonplugin simplementen incluant unfichier appelé loop-mycustomposttype.php dans leurthème.
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.
-
Remplacez Locate_templatepar ceci,s'il vousplaît. `include (Locate_template ('loop-mycustomposttype.php'))` Cettemanièreestpossible depasser des variables. J'aitrouvé ceciici [lien] (http://keithdevon.com/passing-variables-to-get_template_part-in-wordpress/).C'estextrêmement utile!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
-
Pour cefaire,il seranécessaire de changer cela aussi.Comme ceci `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,bonpoint.Avec laformule quej'ai donnée,l'appel `require` ou` require_once` (de `Locate_template`)est à l'intérieur d'unefonctionet n'a doncpas accès à laportée actuelle.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
Pastoutes lesboucles,laboucleprincipale. ;-) Peuimporte que vous regardiez votrepage d'accueil ou une catégorie ou quoi,vous aureztoujours uneboucleprincipale. Le contenu de cetteboucleprincipaleest déterminépar la requête qui a étéexécutée avant que votremodèlene soit appelé.
Lemodèle loop.phpparcourt simplement les éléments de laboucleet lesmet enforme. Voir la documentation du Codex .
Si vous regardez loop.php de Twenty-Ten,vouspouvez voir que Twenty-Ten diversifie alors dans cefichiermodèle unique.
get_template_part()
charge simplement unepartie demodèleet laparcourt. Vouspouveztout aussibien extraire desparties de votre loop.php dans desfichiers séparéset les remplacerpar un appelget_template_part('loop', 'category')
et ainsi de suite.Ou vouspouvez avoir unmodèlepartielpour chaque articleindividuel dans laboucleet demander à votre loop.php d'appeler uniquement
get_template_part('loop','post');
dans lewhile...
clause. Tout dépend de vous.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
Depuis le codexget_template_part :
<?php get_template_part( 'loop', 'index' ); ?>
fera un require () PHPpour lepremierfichierexistant ...
Donc,effectivement,celafonctionnera comme si vous aviezbesoin d'un autrefichierphp.
Mise àjour :il y a une légère différencepar rapport à "require" - Ilestenveloppé dans unefonction,vous devez donc
global
si vous souhaiteztransmettre des variables de votremodèle àvotrepartie demodèle.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.
Quelqu'unpourrait-ilm'expliquer commentfonctionne cettefonction?Je sais ce que celafaitmais quandje regarde le code source dans lemodèle vingt_ten,je ne comprendspas commenttoutes lesboucles sont collectées dans un seul loop.php (j'ai vu cefichier aussi).
Alors,comment résumerparexemple une certainepartie commune dumodèleet la réutiliserensuite dans d'autresmodèles?