WordPress: diferencia entre rewind_posts(), wp_reset_postdata() y wp_reset_query()

3 minutos de lectura

¿Cuál es la diferencia entre las funciones de WordPress? rewind_posts(), wp_reset_postdata() y wp_reset_query() y cuando debo usarlos?

Si tengo esta parte del código en single.php:

$query = new WP_Query($some_args);
while ($query->have_posts()) : $query->the_post();
    ...
endwhile;

esto es igual a esto:

$query = new WP_Query($some_args);
while (have_posts()) : the_post();
    ...
endwhile;

Las dos declaraciones en su pregunta no son iguales.

En el primer bloque, está recorriendo las publicaciones devueltas por su WP_Query personalizado, $query.

En el segundo bloque $query no hace nada y las publicaciones son en realidad del global $wp_query.

Veamos qué hace cada una de las tres funciones que mencionaste.

rewind_posts() – Esto hace exactamente lo que parece. Después de ejecutar un ciclo, esta función se usa para volver al principio, lo que le permite ejecutar el mismo ciclo nuevamente.

wp_reset_postdata() – En su primer bloque de código, ejecuta un WP_Query personalizado. Esto modificará el global $post variable. Después de que esa consulta se haya ejecutado usando wp_reset_postdata() restaurará el mundo $post variable de vuelta a la primera publicación en la consulta principal.

wp_reset_query() – Esto debe usarse si cambia el global $wp_query o usar query_posts() (Yo no sugeriría usar query_posts()). se reinicia $wp_query volver al original.

Otras lecturas:

http://codex.wordpress.org/Function_Reference/rewind_posts
http://codex.wordpress.org/Function_Reference/wp_reset_postdata
http://codex.wordpress.org/Function_Reference/wp_reset_query

  • Debes evitar usar query_posts aunque. Todavía +1 para una gran respuesta

    – Pieter Goosen

    19 de mayo de 2014 a las 6:06


  • @PieterGoosen Estoy de acuerdo, Pieter 🙂 Lo sugerí en mi respuesta, pero vale la pena enfatizar un poco más. Todavía mucha gente usa la función, por lo que vale la pena saber cómo wp_reset_query() encaja con eso. Gracias por el +1

    – Nathan Dawson

    19 de mayo de 2014 a las 6:11


  • Relacionado: ¿Cuándo debería usar WP_Query vs query_posts() vs get_posts()?

    – brasofilo

    19 de mayo de 2014 a las 7:36

  • “En su primer bloque de código, ejecuta un WP_Query personalizado. Esto modificará la variable global $post”. – en realidad, el problema no está en WP_Query en sí, el problema está en llamar a la función the_post(). La función the_post() modificará la variable global $post, pero no WP_Query en sí.

    – Mijaíl

    12 de febrero de 2016 a las 12:21

Rebobinar post – Rebobina hasta el comienzo del ciclo. Por lo general, borra el ciclo actual. Ejemplo

<? Php  
/ / use the cycle for the first time 
if ( have_posts ( )  ) {  while ( have_posts ( ) ) { the_post ( ) ;  ?> 
    < ! - - display information about the post - - > 
<? php  }  }  ?>


    < ! - - any - anything any code - - >


<? Php  
/ / use the cycle for the second time 
/ / rewind to the beginning of the cycle to once again ispolzvoat heve_posts () 
rewind_posts ( ) ; 
if ( have_posts ( )  ) {  while ( have_posts ( ) ) { the_post ( ) ;  ?> 
    < ! - - display information about the post - - > 
<? php  }  }  ?>

Probablemente no necesite wp_reset_query(). wp_reset_query() anula la variable principal $wp_query, luego la restablece al valor de $wp_the_query y luego ejecuta wp_reset_postdata(). Bueno, si no estás usando query_posts(), entonces realmente no deberías estar jugando con la variable principal $wp_query, como lo hace wp_reset_query().

Todo lo que necesita hacer después de una WP_Query personalizada es usar wp_reset_postdata(), que restablece varias variables globales de publicación a sus valores originales.

Referencia aquí

¿Ha sido útil esta solución?