wp_reset_postdata () ou wp_reset_query () après une boucle personnalisée?

37

Lire des informations sur query_reset_postdata et query_reset_query me rend confus. Par exemple:

  
  1. Est-il nécessaire d'utiliser simultanément wp_reset_postdata et wp_reset_query?

  2.   
  3. enlace

  4.   

Ce qui précède indique que vous ne devez utiliser query_reset_postdata() que lorsque vous utilisez des "requêtes séparées". Dans l'exemple2, il y a un commentaire:

WP_Query( $args ) = wp_reset_postdata();

ET

query_posts ( $args ) = wp_reset_query();

Et vraiment, vous ne devriez jamais utiliser wp_reset_query car vous ne devriez pas utiliser query_posts!?

Dans le WP Codex, il est indiqué que vous devez utiliser wp_reset_query() après une boucle personnalisée (premier exemple) enlace

Le codex se trompe-t-il alors?

    
posée bestprogrammerintheworld 14.05.2014 - 08:35

1 réponse

56

La différence entre les deux est que

  • wp_reset_query() - s'assure que la requête principale a été réinitialisée à la requête principale d'origine
  • wp_reset_postdata() - garantit que le $post global a été restauré dans la publication actuelle dans la requête principale.

En effet, en regardant la source , vous verrez que le wp_reset_query() appelle wp_reset_postdata() . La seule différence entre les deux est alors cette ligne:

$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];

(en wp_reset_query() ). Donc, wp_reset_query() n'est nécessaire que si ces deux globales diffèrent, et cela ne se produit que si query_posts() a été utilisé quelque part.

Quand devrais-je les utiliser?

En termes simples:

  • wp_reset_postdata() - immédiatement après chaque coutume WP_Query()
  • wp_reset_query() - immédiatement après chaque boucle utilisant query_posts()

Dois-je utiliser wp_reset_query

Bien, oui, mais ce n’est nécessaire qu’après avoir utilisé query_posts() . Comme vous l'avez indiqué, vous ne doit jamais utiliser query_posts() . Donc, si vous n'utilisez jamais query_posts() , il n'est pas nécessaire d'appeler wp_reset_query() (au lieu de wp_reset_postdata() .

En bref, ce n'est pas que vous ne devriez pas utiliser wp_reset_query() au lieu de wp_reset_postdata() , c'est que vous ne devriez jamais en avoir besoin!

    
réponse donnée Stephen Harris 14.05.2014 - 08:49

Lire d'autres questions sur les étiquettes