wp_reset_postdata () o wp_reset_query () después de un bucle personalizado?

42

Leer algunas cosas query_reset_postdatay query_reset_queryme confunde. Por ejemplo:

  1. ¿Hay alguna necesidad de usar wp_reset_postdata y wp_reset_query juntos?

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

Lo anterior indica que solo debe usar query_reset_postdata()cuando use "consultas separadas". En el ejemplo 2 hay un comentario:

WP_Query( $args ) = wp_reset_postdata();

Y

query_posts ( $args ) = wp_reset_query();

¿Y realmente nunca deberías usar wp_reset_queryporque no deberías usar query_posts?

En el WP Codex establece que debe usar wp_reset_query()después de un bucle personalizado (primer ejemplo) http://codex.wordpress.org/Function_Reference/wp_reset_query

¿Está mal el códice entonces?

bestprogrammerintheworld
fuente

Respuestas:

66

La diferencia entre los dos es que

  • wp_reset_query() - asegúrese de que la consulta principal se haya restablecido a la consulta principal original
  • wp_reset_postdata()- asegura que el global $postse haya restaurado a la publicación actual en la consulta principal.

De hecho, mirando la fuente verás que las wp_reset_query()llamadas wp_reset_postdata(). La única diferencia entre los dos es esta línea:

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

(en wp_reset_query()). Por wp_reset_query()lo tanto, solo es necesario si esas dos variables globales son diferentes, y eso solo sucede si query_posts()se ha utilizado en alguna parte.

¿Cuándo debo usarlos?

Simplemente pon:

  • wp_reset_postdata() - inmediatamente después de cada costumbre WP_Query()
  • wp_reset_query() - inmediatamente después de cada bucle usando query_posts()

¿Debo usar wp_reset_query

Bueno, sí, pero solo es necesario después de usar query_posts(). Como has señalado , nunca debes usarloquery_posts() . Entonces, si nunca está usando, query_posts()entonces no es necesario llamar wp_reset_query()(en lugar de wp_reset_postdata().

En resumen, no es que no debas usar en wp_reset_query()lugar de wp_reset_postdata(), ¡es que nunca deberías necesitar!

Stephen Harris
fuente
1
Entonces, básicamente, estás diciendo: ¿solo usas wp_reset_postdata () y el códice tiene un mal ejemplo? (Si quieres hacerlo correctamente)
bestprogrammerintheworld
1
El códice puede cambiar, así que voy a evitar hacer declaraciones absolutas al respecto que pueden volverse incorrectas. Tiene un ejemplo de un WP_Query()bucle que usa wp_reset_query()e innecesariamente. Podría usar wp_reset_postdata()en su lugar, pero no se hace daño. También tiene un query_posts()ejemplo donde lo hace y debe usar wp_reset_query(). Como se señaló en el códice, aunque este es un mal ejemplo y 'no recomendado' en el sentido de que query_posts()nunca debe usarse.
Stephen Harris