Quelqu'un pourrait-il m'expliquer s'il vous plaît comment cette fonction fonctionne dans une boucle?
J'ai utilisé cette fonction plusieurs fois dans une boucle wordpress comme ceci:
loop start
get_template_part("template/part", "example");
loop end
Et la magie à ce sujet est que je peux appeler des fonctions telles que the_title()
sans aucun problème dans le modèle part-example.php
.
Mais si j'essaie de passer des variables personnalisées à part-example.php
comme ceci, cela échouera:
$var = "variable";
Start loop
get_template_part("template/part", "example");
End loop
Et à l'intérieur du fichier part-exmaple.php
echo $var; // this will fail
Je trouve une solution de contournement pour résoudre ce problème en lisant très bien cet article , il utilise include( locate_template() )
.
Mais je me demande simplement comment les données de publication sont transmises par get_template_part()
?
Merci d'avance.
Les données de publication ne sont pas réellement transmises à la partie modèle. Il existe une variable globale appelée $post
qui contient des données sur la publication en cours, telles que l'ID de la publication.
Lorsque vous appelez une partie de modèle à l'aide de get_template_part()
, WordPress examinera l'intérieur de ce modèle et exécutera le contenu de celui-ci, en le affichant dans la boucle.
Par exemple, si vous utilisez the_title()
dans votre modèle, WordPress essaiera d’exécuter la fonction the_title()
, qui dépend de l’ID de publication. Cependant, étant donné que la variable globale $post
est disponible dans votre partie modèle, l'appel à $post->ID
aboutira et la fonction the_title()
affichera avec succès le titre du message en cours.
Si vous souhaitez transmettre des données à votre pièce de modèle, vous pouvez utiliser set_query_var();
à la place. Considérons une boucle comme celle-ci:
if (have_posts()) {
while(have_posts()) {
the_post();
set_query_var( 'sample', 'sample_value' );
get_template_part("template/part", "example");
}
}
Cela passera l'exemple dans le fichier de modèle, qui peut être récupéré en utilisant cette ligne de code:
extract( $wp_query->query_vars );
et ensuite imprimé par:
var_dump( $sample);
J'espère que vous comprenez mieux maintenant comment cette fonctionnalité fonctionne.