web-dev-qa-db-fra.com

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

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

  1. Est-il nécessaire d'utiliser les deux wp_reset_postdata et wp_reset_query ensemble?

  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_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) http://codex.wordpress.org/Function_Reference/wp_reset_query

Le codex a-t-il tort alors?

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 le 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'];

(dans wp_reset_query()). Donc, wp_reset_query() n'est nécessaire que si ces deux éléments globaux 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 coutume WP_Query()
  • wp_reset_query() - immédiatement après chaque boucle utilisant query_posts()

Devrais-je utiliser wp_reset_query

Eh bien, oui, mais ce n’est nécessaire qu’après l’utilisation de query_posts(). Comme vous l'avez indiqué, vous ne devez jamais utiliser query_posts() . Donc, si vous n'utilisez jamais query_posts(), alors il est non 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!

59
Stephen Harris