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

42

Lire des choses sur query_reset_postdataet query_reset_queryme rend confus. Par exemple:

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

  2. http://www.poststat.us/properly-reset-wordpress-query/

Ci-dessus, vous ne devez utiliser que query_reset_postdata()lorsque vous utilisez des "requêtes séparées". Dans 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_queryparce que 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) http://codex.wordpress.org/Function_Reference/wp_reset_query

Le codex a-t-il tort alors?

bestprogrammerintheworld
la source

Réponses:

66

La différence entre les deux est que

  • wp_reset_query() - s'assurer que la requête principale a été réinitialisée à la requête principale d'origine
  • wp_reset_postdata()- s'assure que la variable globale $posta été restaurée à la publication en cours dans la requête principale.

En effet, en regardant la source, vous verrez que les wp_reset_query()appels 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, ce 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?

Tout simplement:

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

Devrais-je utiliser wp_reset_query

Eh bien, oui, mais ce n'est nécessaire qu'après avoir utilisé query_posts(). Comme vous l'avez souligné, vous ne devriez jamais utiliserquery_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 à la wp_reset_query()place wp_reset_postdata(), c'est que vous ne devriez jamais en avoir besoin!

Stephen Harris
la source
1
Donc, en gros, vous dites: utilisez uniquement wp_reset_postdata () et le codex a un mauvais exemple? (Si vous voulez le faire correctement)
bestprogrammerintheworld
1
Le codex peut changer, je vais donc éviter de faire des déclarations absolues qui pourraient devenir incorrectes. Il a par exemple une WP_Query()boucle qui utilise wp_reset_query()et inutilement. Il pourrait utiliser à la wp_reset_postdata()place, mais aucun mal n'est fait. Il contient également un query_posts()exemple où il doit et doit être utilisé wp_reset_query(). Comme indiqué dans le codex, il s’agit d’un mauvais exemple et de "non recommandé" en ce sens qu’il query_posts()ne devrait jamais être utilisé.
Stephen Harris