Sign up with your email address to be the first to know about new products, VIP offers, blog features & more.

El Loop de WordPress: entendiendo la diferencia entre query_posts y WP_Query

Si hay algo importante en un sitio WordPress es el loop. Para programar sitios basados en WordPress debemos tener muy en cuenta los métodos que nos proporciona: query_posts y WP_Query, ¿qué diferencias tiene? ¿Cuándo debemos usar cada una?

Resumiendo

La función query_posts está pensada para modificar el loop de la página principal. La idea de esta función no es crear loops secundarios. Si lo que queremos es crear loop secundarios, deberemos usar objetos WP_Query. Usar query_posts en loop secundarios puede darnos como resultado comportamiento erróneos que muestren cosas que no queremos.

Loop de WordPress

¿Pero qué es el loop principal y qué son los loop secundarios?

Vamos a explicar detalladamente estos dos conceptos, para qué sirven y en qué situaciones hacen falta.

El loop principal y query_posts

De forma genérica podemos decir que todos los ficheros del theme: index.php, single.php, page.php, etc., contendrán al principio del código algo así:

Más abajo, habrá algún sitio donde se define el final de estos bloques con: endwhile; endif;  que supondrán el fin del loop. Este área, constituirá el loop principal.

Para usar query_posts sólo tenemos que ponerlo antes de que el loop empiece. El objeto WP_Query interno, generará una nueva sentencia SQL con los parámetros que hemos indicado.

Ten en cuenta que WordPress incluye algunos ajustes que puede controlar cuando el loop se genera, estos ajustes pueden interferir con tus parámetros, así que no lo olvides si no obtienes el resultado esperado.

Típico problema en este sentido: definir valores diferentes en “Ajustes > Lectura” para cantidad de entradas por página y en el parámetro ‘posts_per_page’.

En el Codex hay multitud de ejemplos de uso de query_posts.

Creando loops personalizados con WP_Query

Si necesitas crear un loop personalizado en una página que ya tiene funcionando el loop principal, necesitas usar WP_Query.

¿Para qué puedo querer utilizar un loop personalizado? Es muy típico el caso en que en una página se muestran por un lado “Últimas noticias de tecnología”, “Últimas noticias del motor”, todas son noticias, pero cada una de una categoría, necesitas diferentes loops.

WP_Query no interferirá con el loop principal. Tienes que pensar que WP_Query es una clase que creará otro objeto en memoria y por lo tanto, no tendremos el problema de estar manejando el mismo objeto continuamente.

Tanto WP_Query como query_posts están definidos en el fichero query.php del wp-includes, por si queréis verles las tripas.

Leer entrada anterior
Evitar entradas duplicadas en el loop de WordPress

Por motivos que pueden tener que ver con filtros o mala utilización de las consultas personalizadas para loops, es posible...

Cerrar