Quelquun pourrait-il mexpliquer comment fonctionne cette fonction? Je sais ce que cela fait, mais quand je regarde le code source dans le modèle vingt_ten, je ne comprends pas comment toutes les boucles sont rassemblées dans un seul loop.php (jai vu ce fichier aussi).
Alors, comment faire pour supprimer par exemple une certaine partie commune du modèle, puis la réutiliser dans dautres modèles?
Commentaires
- Essayez de regarder codex.wordpress.org/Function_Reference/get_template_part
Réponse
Quelques très bonnes réponses introductives ici.
En gros, get_template_part()
permet aux développeurs de thèmes de définir un ordre de spécificité des fichiers modèles. Pensez-y de la même manière que spécificité telle quelle sapplique aux sélecteurs CSS. Lors de la conception de quelque chose, vous voulez commencer avec le strict minimum de spécificité, afin quil puisse être facilement remplacé dans les parties dune conception qui nécessitent une attention individuelle.
Donc, par exemple , vous « redéfinissez le style dun blog et vous créez une boucle .php qui fonctionne bien pour le balisage des messages. Mais vous planifiez à lavance, et vous lappelez dans vos fichiers de modèle plus tard avec des spécificateurs de contexte supplémentaires – par exemple, sur la page dindex, vous appelez get_template_part( "loop", "index" );
, sur le modèle unique, vous appelez get_template_part( "loop", "single" );
, sur les pages darchives, vous appelez get_template_part( "loop", "archive" );
, et ainsi de suite. Cela facilite la tâche lorsque vous décidez de baliser la boucle sur vos pages darchives différemment de la page daccueil: créez simplement un loop-archive.php et il « sera utilisé à la place du loop.php .
Mais la magie derrière get_template_part()
est dans la fonction locate_template()
, qui vérifie dabord le répertoire du thème, puis le répertoire parent (si one existe) pour le fichier nommé. Ceci est très utile pour le développement de plugins. Dans lun de mes plugins, je définis un type de publication personnalisé et créé un fichier de modèle de boucle pour ce type de publication personnalisé dans mon répertoire de plugins. pour permettre aux thèmes utilisant mon plugin de remplacer mon balisage sils le souhaitent. Cest là que locate_template()
fonctionne vraiment à merveille.
locate_template($template_names, $load = false, $require_once = true )
cherchera chacun des noms dans le tableau $ template_names dans le répertoire de la feuille de style, puis dans le fichier temp répertoire tardif. Passer « true » comme argument $ load signifie quil nécessitera le premier fichier trouvé, et renverra une chaîne vide si aucun fichier modèle na été localisé. Je peux donc faire quelque chose comme ça dans mon plugin:
if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" );
… ce qui devrait, espérons-le, permettre aux développeurs de thèmes de personnaliser très facilement mon plugin simplement en incluant un fichier appelé loop-mycustomposttype.php dans leur thème.
Commentaires
- Remplacez Locate_template par ceci, sil vous plaît.
include(locate_template( 'loop-mycustomposttype.php'))
Cette manière est possible de passer des variables. Jai ' trouvé ceci ici lien . Cela ' est extrêmement utile! - Pour ce faire, ' va être nécessaire de changer cela aussi. Comme ceci
if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
- Oh, bon point. Avec la formule que jai donnée, lappel
require
ourequire_once
(delocate_template
) est à lintérieur une fonction et na donc pas ' accéder à la portée actuelle.
Réponse
Pas toutes les boucles, la boucle principale. 😉 Peu importe si vous regardez votre page daccueil ou une catégorie ou quoi, vous aurez toujours une boucle principale. Le contenu de cette boucle principale est déterminé par la requête qui a été exécutée avant votre modèle a été appelé.
Le modèle loop.php parcourt simplement les éléments de la boucle et les formate. Voir la documentation du Codex .
Si vous regardez le loop.php de Twenty-Ten, vous pouvez voir que Twenty-Ten puis diversifie dans ce fichier modèle unique.
get_template_part()
charge simplement une partie du modèle et la parcourt. Vous pouvez tout aussi bien extraire parties de votre loop.php dans des fichiers séparés et remplacez-les par un get_template_part("loop", "category")
et ainsi de suite.
Ou vous pouvez avoir un modèle de partie pour chaque article individuel dans la boucle et demandez à votre loop.php dappeler uniquement get_template_part("loop","post");
dans la clause while...
. Tout dépend de vous.
Réponse
<?php get_template_part( "loop", "index" ); ?>
fera un require () PHP pour le premier fichier qui existe …
Donc, effectivement, cela fonctionnera comme si vous aviez besoin dun autre fichier php.
Update : Il y a une légère différence avec « require » – Il est enveloppé dans une fonction donc vous devez global
si vous souhaitez transmettre des variables de votre modèle à votre partie de modèle.