¿Usar wp_reset_postdata() o wp_reset_query() después de un loop personalizado?

14 may 2014, 09:35:18
Vistas: 92.1K
Votos: 66

Al leer sobre query_reset_postdata y query_reset_query me siento confundido. Por ejemplo:

  1. ¿Es necesario usar tanto wp_reset_postdata como wp_reset_query juntos?

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

Lo anterior indica que solo deberías usar query_reset_postdata() cuando usas "consultas separadas". En el ejemplo2 hay un comentario:

WP_Query( $args ) = wp_reset_postdata();

Y

query_posts ( $args ) = wp_reset_query();

¡Y realmente nunca deberías usar wp_reset_query porque no deberías usar query_posts!?

En el Codex de WP dice que deberías usar wp_reset_query() después de un loop personalizado (primer ejemplo) http://codex.wordpress.org/Function_Reference/wp_reset_query

¿Entonces el codex está equivocado?

0
Todas las respuestas a la pregunta 1
4
106

La diferencia entre los dos es que

  • wp_reset_query() - asegura que la consulta principal se ha restablecido a la consulta principal original
  • wp_reset_postdata() - asegura que el global $post se ha restaurado al post actual en la consulta principal.

De hecho, al mirar el código fuente verás que wp_reset_query() llama a wp_reset_postdata(). La única diferencia entre los dos entonces es esta línea:

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

(en wp_reset_query()). Así que wp_reset_query() solo es necesario si esos dos globales difieren, y eso solo ocurre si se ha usado query_posts() en algún lugar.

¿Cuándo debería usarlos?

En pocas palabras:

  • wp_reset_postdata() - inmediatamente después de cada WP_Query() personalizado
  • wp_reset_query() - inmediatamente después de cada bucle que use query_posts()

¿Debería usar wp_reset_query?

Bueno, sí, pero solo es necesario después de usar query_posts(). Como has señalado, nunca deberías usar query_posts(). Así que si nunca usas query_posts(), entonces no es necesario llamar a wp_reset_query() (en lugar de wp_reset_postdata()).

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

14 may 2014 09:49:16
Comentarios

Entonces básicamente estás diciendo: ¿Solo usar wp_reset_postdata() y el codex tiene un mal ejemplo? (Si quieres hacerlo correctamente)

bestprogrammerintheworld bestprogrammerintheworld
14 may 2014 10:40:07

El codex puede cambiar, así que voy a evitar hacer declaraciones absolutas sobre él que podrían volverse incorrectas. Tiene un ejemplo de un bucle WP_Query() que usa wp_reset_query() innecesariamente. Podría usar wp_reset_postdata() en su lugar, pero no hace daño. También tiene un ejemplo de query_posts() donde sí usa, y debe usar, wp_reset_query(). Como se señala en el codex, aunque este es un mal ejemplo y 'no recomendado' en el sentido de que query_posts() nunca debería usarse.

Stephen Harris Stephen Harris
14 may 2014 11:08:23

¿Necesito restablecer la consulta si recorro la consulta dentro de un bucle foreach?

Por ejemplo:

$sol_args = array( 'post_type' => 'solution', 'orderby' => 'menu_order', 'order' => 'ASC', 'lang' => pll_current_language(), 'posts_per_page' => '-1', );

$solution_posts = new WP_Query($sol_args); $solution_posts = $solution_posts->get_posts();

<?php foreach ($solution_posts as $solution_post) { ?> <?php } ?>

wp_reset_postdata()

Marcuzio Developuzio Marcuzio Developuzio
9 nov 2022 15:01:44

Tomé este consejo literalmente y tuve problemas. Dice que hay que llamar a wp_reset_postdata() inmediatamente después de cada consulta personalizada WP_Query() (énfasis añadido). Pero, la referencia para desarrolladores dice que debería llamarse cuando:

"Un bucle de consulta secundario usando $sec_query = new WP_Query() y $sec_query->the_post() afecta a la variable global $post."

De nuevo, énfasis añadido.

Si no estás llamando a the_post() entonces no hay necesidad de llamar a wp_reset_postdata() y, de hecho, hacerlo puede causar problemas.

Dave S Dave S
1 may 2024 19:57:16