Comment utiliser get_template_part ()?

23

Quelqu'un pourrait-il m'expliquer s'il vous plaît comment cette fonction fonctionne? Je sais ce que ça fait, mais quand je regarde le code source dans le template twenty_ten, je ne comprends pas comment toutes les boucles sont collectées dans un seul fichier loop.php (j'ai aussi vu ce fichier).

Alors, comment par exemple extraire une certaine partie commune du modèle et la réutiliser ensuite avec d’autres modèles?

    
posée Amit Erandole 21.02.2011 - 17:17
la source

3 réponses

21

Quelques très bonnes réponses introductives ici.

Fondamentalement, get_template_part() permet aux développeurs de thèmes de définir un ordre de spécificité des fichiers de modèle. Pensez-y de la même manière que la spécificité telle qu’elle s’applique aux sélecteurs CSS. Lorsque vous concevez quelque chose, vous voulez commencer avec le strict minimum de spécificité, de sorte qu'il puisse être facilement remplacé dans les parties d'une conception qui nécessitent une attention particulière.

Par exemple, vous modélisez un blog et créez un fichier loop.php qui fonctionne bien pour le balisage des publications. Mais vous planifiez à l’avance et vous l’appelez ultérieurement dans vos fichiers de modèle avec des spécificateurs de contexte supplémentaires. Par exemple, sur la page d’index, vous appelez get_template_part( 'loop', 'index' ); , sur le modèle unique, vous appelez get_template_part( 'loop', 'single' ); , sur les pages d’archive, vous appelez get_template_part( 'loop', 'archive' ); , et ainsi de suite. Cela vous facilite la tâche lorsque vous décidez de marquer différemment la boucle de vos pages d’archives par rapport à la page d’accueil: créez simplement un modèle loop-archive.php et il sera utilisé plutôt que le loop.php générique.

Mais la magie derrière get_template_part() réside dans la fonction locate_template() , qui vérifie d’abord le répertoire du thème, puis le répertoire parent (s’il en existe un) pour le fichier nommé. Ceci est très utile pour le développement de plugins. Dans l'un de mes plugins, j'ai défini un type de publication personnalisé et créé un fichier de modèle de boucle pour ce type de publication personnalisé dans le répertoire de mon plugin. Mais ... je veux permettre aux thèmes utilisant mon plugin de remplacer mon balisage s'ils le souhaitent. C’est là que locate_template() fait vraiment des merveilles.

locate_template($template_names, $load = false, $require_once = true )

cherchera chacun des noms dans le tableau $ template_names dans le répertoire stylesheet, puis dans le répertoire template. Passer 'true' en tant qu'argument $ load signifie qu'il aura besoin du premier fichier trouvé et qu'il retournera une chaîne vide si aucun fichier de modèle n'a été localisé. Donc, je peux faire quelque chose comme ça dans mon plugin:

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

... ce qui devrait permettre aux développeurs de thèmes de personnaliser mon plugin très facilement, simplement en incluant un fichier appelé loop-mycustomposttype.php dans leur thème.

    
réponse donnée goldenapples 08.02.2012 - 18:13
la source
5

Pas toutes les boucles, la boucle principale. ;-) Peu importe si vous regardez votre page de garde ou une catégorie ou quoi que ce soit, vous aurez toujours une boucle principale. Le contenu de cette boucle principale est déterminé par la requête exécutée avant que votre modèle ne soit appelé.

Le modèle loop.php parcourt simplement les éléments de la boucle et les formate. Voir la documentation du Codex .

Si vous examinez le fichier loop.php de Twenty-Ten, vous constaterez que Twenty-Ten diversifie ensuite ce fichier dans ce modèle unique.

get_template_part() se contente de charger un modèle et de le parcourir. Vous pouvez également extraire des parties de votre fichier loop.php dans des fichiers séparés et les remplacer par un get_template_part('loop', 'category') et ainsi de suite.

Vous pouvez également avoir un modèle de partie pour chaque publication individuelle dans la boucle et demander à votre loop.php uniquement d'appeler get_template_part('loop','post'); dans la clause while... . À vous de voir.

    
réponse donnée wyrfel 21.02.2011 - 17:38
la source
3

Extrait du codex get_template_part :

  

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

     

fera un require PHP () pour le premier fichier existant ...

Donc, cela fonctionnera comme si vous demandiez un autre fichier php.

Mise à jour : il existe une légère différence entre l'option "require" - elle est encapsulée dans une fonction. Vous devez donc global si vous souhaitez transmettre des variables de votre modèle à votre partie de modèle.

    
réponse donnée icc97 08.02.2012 - 12:02
la source

Lire d'autres questions sur les étiquettes