7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. WordPress

Dominando WP_Query: Usando el bucle

Scroll to top
Read Time: 7 mins
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: An Introduction
Mastering WP_Query: Related Functions

Spanish (Español) translation by Oscar Abad Folgueira (you can also view the original English article)

Como he perfilado en la introducción a esta serie, la clase WP_Query tiene cuatro elementos:

  • los argumentos para la consulta, usando parámetros que veremos en detalle en esta serie
  • la consulta en sí misma
  • el bucle, que mostrará el contenido del post, títulos o cualquier cosa que quieras mostrar
  • para terminar: cerrando las etiquetas if y while y reseteando los datos del post

En este tutorial te mostraré cómo usar el bucle con WP_Query, incluyendo la dos formas de estructurar tu bucle y cómo usar múltiples bucles.

Dónde Encaja el Bucle

Sin el bucle, no se mostrará nada en tu página. Después de que WordPress ha ejecutado la consulta utilizando los argumentos que has definido, necesita que le digan qué mostrar de los datos que ha ido a buscar. Aquí es donde aparece el bucle.

Por lo tanto el bucle aparece después de tu consulta y utiliza tres etiquetas:

  • if( $query->have_posts() ) comprueba si hay algún post.
  • while( $query->have_posts() ) repite el bucle por cada post mientras haya posts.
  • $query->the_post() accede a un post específico.

Por lo tanto aquí es donde el bucle encaja en la clase WP_Query:

Tras ejecutar el bucle, todo lo que queda por hacer es poner en orden las cosas usando wp_reset_postdata().

Estructura del Bucle

La forma en que está estructurado tu bucle dependerá de qué datos de tu post quieres mostrar. Aquí hay un ejemplo de bucle que muestra el título del post, imagen destacada y un resumen. Tendrías que utilizar un bucle como este en una página de archivo.

Este bucle muestra exactamente lo que he descrito anteriormente: la imagen característica, el título y el resumen.

El Bucle con más Detalle: Comprobar el Contenido

Pero a veces podrías querer añadir un encabezado antes de la lista de los posts o podrías querer encerrarlos en un elemento contenedor. Si simplemente lo has añadido antes de tu bucle, lo mostrará independientemente de si la consulta actual devuelve algún dato, lo que quiere decir que puede tener un encabezado sin nada debajo o con alguna marca innecesaria.

Esto es fácil de conseguir poniendo el elemento contenedor o el encabezado dentro de una etiqueta if:

Aquí puedes ver que he comprobado si hay algún post devuelto por mi consulta y si lo hay, abro el elemento contenedor y añado un encabezado.

Esto también es útil si quieres mostrar los resultados de tu consulta como una lista. Digamos que quiero crear una lista de todos los posts de una categoría en concreto. El elemento ul no está dentro de mi bucle y no está relacionado con un post específico pero solo quiero mostrarlo si hay posts. Por lo tanto utilizo esto:

Esto comprueba si la consulta ha encontrado algún post y si es así, abre el elemento ul y ejecuta el bucle.

Ejecutando Bucles Extra

Es importante tener en cuenta que mientras puedes utilizar WP_Query para ejecutar más de un bucle, tienes que resetear los datos del post y comenzar una segunda instancia de WP_Query para hacer esto. Esto es porque cada uno de tus bucles mostrará datos basados en diferentes argumentos:

Este ejemplo muestra el resumen y la imagen característica del primer post y entonces el título de cada post posterior:

Yo he usado dos argumentos aquí:

  • 'post_per_page' => '1'  usado con la primera consulta me muestra el post más reciente.
  • 'offset' = '1' utilizado en le segunda consulta, se salta el primer post asegurándose de que no está repetido en la lista de abajo.
  • Como puedes ver en el código anterior, el bucle es ligeramente diferente para cada consulta. El primero muestra la imagen destacada, el título y el resumen, mientras que el segundo comprueba si la consulta tiene posts y si es así, abre un elemento ul y agrupa cada título de post en un elemento li y lo enlaza a su página.

También notarás que he usado wp_reset_postdata() después de ambos bucles. Si no hubiera hecho esto, el segundo bucle todavía mostraría datos del primer post.

Sumario

Sin un bucle, WP_Query no hace mucho realmente. El bucle es el código que usas para mostrar los datos que WordPress ha extraído de la base de datos basándose en los argumentos de tu consulta.

Como he demostrado, hay algunas variaciones en el bucle. Un bucle sencillo mostrará todos los posts en el orden que le hayas especificado en los argumentos de tu consulta (o por fecha en orden descendente por defecto). Si separas if( $query->have_posts() ) y while( $query->have_posts() ), puedes insertar marcas adicionales fuera de tu bucle, pero sólo si tu consulta ha devuelto datos. Y finalmente, especificando argumentos alternativos y usando wp_reset_postdata() después de cada bucle, puedes usar WP_Query más de una vez para crear varios bucles en tu página.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.