web-dev-qa-db-fra.com

Comment fonctionne get_template_part () dans une boucle?

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.

1
Speir

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.

1
Jack Johansson