¿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í