web-dev-qa-db-fra.com

Pourquoi devrais-je utiliser wp_reset_postdata ()?

Je ne suis pas capable de comprendre l'utilisation de wp_reset_postdata. qu'est-ce qui pourrait mal tourner si je ne l'utilise pas?

https://codex.wordpress.org/Function_Reference/wp_reset_postdata

Ici, dans la documentation, qu'est-ce qu'une requête principale et une requête secondaire?

Merci

3
Latheesh V M Villa

WordPress utilise la variable globale $post. De cette façon, vous n'avez pas à passer post ni id_ID en tant que paramètre pour les fonctions. Vous pouvez donc appeler the_title() et WP sait quel titre doit apparaître.

Ce comportement fonctionne bien s'il n'y a qu'une seule boucle sur le site. Mais si vous créez vos propres boucles personnalisées et les itérez, vous modifiez la variable globale $post ...

Regardons un échantillon. Disons qu'il s'agit de single.php pour l'article "News 01":

    ...
    while ( have_posts() ) : the_post();
?>
    <h1><?php the_title(); // it will show News 01 ?></h1>
    <?php the_content(); // it will show its content ?>

    <?php
        $related = new WP_Query( ... );
        while ( $related->have_posts() ) : $related->the_post();
    ?>
        <article>
            <h2><?php the_title(); // it will show other title ?></h2>
        </article>
    <?php endwhile; ?>

    <?php the_category(); // what will that show? categories for which post? ?>

Dans la dernière ligne, il affichera les catégories du dernier des postes liés. Pourquoi? Car il s’agit de la publication sur laquelle la variable globale $post est définie.

Mais si vous appelez wp_reset_postdata(); après endwhile, vous redéfinirez $post global à la publication à partir de l'objet $wp_query global, de sorte que tout fonctionnera à nouveau correctement.

4
Krzysiek Dróżdż