web-dev-qa-db-fra.com

'Setup_postdata ()' doit-il être réinitialisé avec 'wp_reset_postdata ()'?

Commencer avec un exemple a plus de sens, alors voici un exemple de fonction:

function seo_meta_tags() {
    global $post;

    if( is_singular() ) {

        setup_postdata( $post );

        $description = str_replace( '... <a class="read-more" href="' . get_permalink() . '">Cont. reading &rarr;</a>', '...', get_the_excerpt() );

        wp_reset_postdata();

        echo '<meta itemprop="description" name="description" content="' . $description . '">';

    }
}

NOTE: Le code n'a pour but que de vous donner une idée de ce que j'essaie d'accomplir et non pas exactement de la façon dont je le fais.

Pour en venir maintenant au fait, setup_postdata( $post ) devrait-il être fermé avec wp_reset_postdata() comme indiqué dans l'exemple?

2
its_me

Comme setup_postdata est messing avec des variables globales qui pourraient être (très probablement:are) utilisées par d’autres boucles (y compris The Loop ), vous devriez toujours réinitialiser ces variables à ce qu'elles devraient être - en fonction de la requête principale (c'est-à-dire ce que WordPress pense que l'utilisateur voulait en premier lieu).
De plus, setup_postdata est fourni avec (une référence à) le $post global, qui peut être modifié par la suite.

Donc, oui, setup_postdata devrait être accompagné de wp_reset_postdata .

Comme vous pouvez le constater dans le code , la fonction reset_postdata appelle, en fait, setup_postdata sur l'objet original $post.

5
tfrommen