Estoy usando el siguiente código para recuperar publicaciones:
<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');
while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<div class="meta">
By <?php the_author() ?>
</div>
<div class="storycontent">
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
¿Necesito usar wp_reset_query()
? Si lo hago, ¿dónde debo colocarlo?
the_post()
método (es decir$my_custom_query->the_post()
), rellena las variables de publicación que mira la consulta principal, el restablecimiento rellena estos vars con los datos anteriores cuando lo llama. Es una buena práctica usar restablecimientos después de consultas personalizadas.Respuestas:
Hola @janoChen:
Respuesta simple: no.
Lo que sigue es lo que el código PHP para la función
wp_reset_query()
de/wp-includes/query.php
WordPRess v3.0.4, así como las funciones llamadas posteriormente. Puede ver que se trata principalmente de modificar variables globales.Cuando lo use
new WP_Query($args)
, asignará el valor de retorno de los valores a una variable local, por lo tanto, a menos que esté haciendo algo tan complejo que ya sepa la respuesta a esta pregunta, entonces no, no necesita llamarwp_reset_query()
:-Micro
fuente
the_post()
en su código, las mejores prácticas dictan que debe usarwp_reset_postdata()
.wp_reset_query()
llamadaswp_reset_postdata()
, por lo que funcionará, aunque la otra cosawp_reset_query()
sí, restablecer la$wp_query
variable global, no es necesaria, pero no es perjudicial en este caso. Entonces la respuesta es realmente SÍNo es necesario
WP_Query
por sí mismo, pero es necesario (o al menos algo bueno que hacer) si utiliza alguna función / método relacionado (comothe_post()
osetup_postdata()
) para completar las variables globales con sus datos.Básicamente, crear un nuevo
WP_Query
objeto es simplemente recuperar datos, pero usarlo para ejecutar el bucle activo y hacer que los datos sean accesibles para las etiquetas de plantilla modifica el entorno y es bueno restablecer todo después.En general, no es una penalización de rendimiento significativa llamarlo, por lo que es más fácil llamarlo siempre que decidir si debe hacerlo u olvidarlo y tener algo misteriosamente roto.
Actualizar
wp_reset_postdata()
La función parece ser una opción más adecuada.wp_reset_query()
restablece las variables globales$wp_query
(queWP_Query
objeto personalizado no afecta) y$post
(que podría ser como el anterior).wp_reset_postdata()
solo restaura$post
, lo que debería ser suficiente.fuente
No. Si crea una instancia de su propio objeto WP_Query, es suyo para que haga lo que quiera. Sin embargo, si manipulas la
global $wp_query
variable, bueno, entonces estás en el espacio de nombres global que afecta el script de cualquier persona que esté usando esa variable simultáneamente. Y si hace algo para cambiar los datos que contiene, también debe restablecerlo una vez que haya terminado de usarlo.fuente
Si está utilizando una consulta personalizada como esta
Entonces no tendrás problemas. De lo contrario, si en la misma página hay otro ciclo, seguramente obtendrá resultados inesperados. No utilicé wp_reset_query () en el código anterior (que se colocó en mi archivo header.php. Luego, cuando entré en single.php, principalmente obtuve las páginas de detalles de otras categorías, lo cual fue frustrante. Más tarde, me di cuenta de que yo olvidé restablecer la consulta en la parte superior. Pronto, comenzó a funcionar como un encanto.
fuente