Dominando WP_Query Usando el Loop

Como mencioné en la introducción de esta serie, el WP_Query La clase tiene cuatro elementos principales:

  • Los argumentos para la consulta, utilizando parámetros que se cubrirán en detalle en esta serie.
  • la propia consulta
  • El bucle, que generará contenido de la publicación, títulos o lo que quiera mostrar.
  • Terminando: cerrando las etiquetas if y while y restableciendo los datos del post

En este tutorial te mostraré cómo usar el bucle con WP_Query, Incluyendo las dos formas principales de estructurar su bucle y cómo utilizar múltiples bucles..

Donde el bucle encaja

Sin un bucle, nada se mostrará en su página. Después de que WordPress haya ejecutado la consulta, utilizando los argumentos que ha definido, entonces se le debe decir qué generar a partir de los datos que se han obtenido. Aquí es donde entra el bucle.

Así que el bucle viene después de tu consulta y usa tres etiquetas:

  • if ($ consulta-> have_posts ()) comprueba si hay alguna publicación.
  • while ($ consulta-> have_posts ()) repite el bucle para cada publicación siempre que haya publicaciones para recuperar.
  • $ consulta-> the_post () Accede a ese post específico..

Así que aquí es donde el bucle encaja en el WP_Query clase:

have_posts ()) // Iniciar el bucle sobre los resultados de la consulta. while ($ consulta-> have_posts ()) $ consulta-> the_post (); // Los contenidos de los resultados de la consulta consultados van aquí.  // Restaura los datos originales de la publicación. wp_reset_postdata (); ?>

Después de ejecutar el bucle, todo lo que queda por hacer es arreglar las cosas usando wp_reset_postdata ().

Estructura del Loop

La forma en que está estructurado su bucle dependerá de los datos que desee mostrar en su publicación. Aquí hay un bucle de ejemplo que muestra el título de la publicación, la imagen destacada y un extracto. Usarías un bucle como este en una página de archivo..

have_posts ()) // Iniciar el bucle sobre los resultados de la consulta. while ($ consulta-> have_posts ()) $ consulta-> the_post (); ?> 
> "title =""> "title ="">

Este bucle muestra exactamente lo que he descrito anteriormente: la imagen destacada, el título y el extracto.

Llevando el bucle más lejos: revisando el contenido

Pero a veces es posible que desee agregar un encabezado antes de su lista de publicaciones, o tal vez desee incluirlas todas en un elemento contenedor. Si simplemente agregó esto antes de su bucle, se emitirá independientemente de si la consulta realmente devolvió algún dato, lo que significa que podría tener un encabezado sin nada debajo o un marcado innecesario.

Esto es muy fácil de desplazar colocando el elemento que lo contiene o el encabezado dentro de su Si etiqueta:

have_posts ()) echo '
'; eco '

'. __ ('Título', 'tutsplus'). '

'; // Iniciar el bucle sobre los resultados de la consulta. while ($ consulta-> have_posts ()) $ consulta-> the_post (); ?>
> "title =""> "title ="">
'; // Restaurar datos originales de la publicación. wp_reset_postdata (); ?>

Aquí puede ver que he comprobado si mi consulta ha recuperado alguna publicación y si ha abierto un elemento que contiene y ha agregado un encabezado. 

Esto también es útil si desea mostrar los resultados de su consulta como una lista. Digamos que quiero crear una lista de todas las publicaciones en una categoría determinada. los ul El elemento no está dentro de mi bucle, ya que no se relaciona con una publicación específica, pero solo quiero publicarlo si hay publicaciones. Así que uso esto:

 'category-slug', 'post_type' => 'post'); // Consulta personalizada. $ consulta = nueva WP_Query ($ args); // Comprueba que tenemos resultados de consulta. if ($ query-> have_posts ()) echo '
    '; // Iniciar el bucle sobre los resultados de la consulta. while ($ consulta-> have_posts ()) $ consulta-> the_post (); ?>
  • > "title ="">
  • '; // Restaurar datos originales de la publicación. wp_reset_postdata (); ?>

Esto comprueba si la consulta ha obtenido alguna publicación, y si es así, abre el ul elemento y luego ejecuta el bucle.

Ejecución de bucles extra

Es importante tener en cuenta que mientras se puede usar WP_Query para ejecutar más de un bucle, debe restablecer los datos de la publicación e iniciar una segunda instancia de WP_Query para hacer esto. Esto se debe a que cada uno de sus bucles emitirá datos basados ​​en diferentes argumentos..

Este ejemplo muestra el extracto y la imagen destacada para la primera publicación y luego solo el título de cada publicación posterior:

 'post', 'posts_per_page' => '1'); // Primera consulta personalizada. $ query1 = new WP_Query ($ args1); // Comprueba que tenemos resultados de consulta. if ($ query1-> have_posts ()) // Iniciar el bucle sobre los resultados de la consulta. while ($ query1-> have_posts ()) $ query1-> the_post (); ?> 
> "title =""> "title ="">
'1', 'post_type' => 'post'); // Segunda consulta personalizada. $ query2 = new WP_Query ($ args2); // Comprueba que tenemos resultados de consulta. if ($ query2-> have_posts ()) echo '
    '; // Iniciar el bucle sobre los resultados de la consulta. while ($ query2-> have_posts ()) $ query2-> the_post (); ?>
  • > "title ="">
  • '; // Restaurar datos originales de la publicación. wp_reset_postdata (); ?>

He usado dos argumentos clave aquí:

  • 'posts_per_page' => '1', Usado con la primera consulta, genera solo la publicación más reciente..
  • 'offset' = '1', utilizado con la segunda consulta, omite la primera publicación, asegurándose de que no se repita en la lista a continuación.
  • Como puede ver en el código anterior, el bucle es ligeramente diferente para cada consulta. El primero genera la imagen, el título y el extracto destacados, mientras que el segundo verifica si la consulta tiene publicaciones y, de ser así, abre una ul elemento y encierra cada título de la publicación en una li Elemento y un enlace a su página..

También notarás que utilicé wp_reset_postdata () después de ambos bucles. Si no hubiera hecho esto, el segundo bucle seguiría generando datos desde el primer.

Resumen

Sin un bucle, WP_Query Realmente no hace mucho. El bucle es el código que utiliza para mostrar los datos que WordPress ha obtenido de la base de datos en función de los argumentos de su consulta..

Como he demostrado, hay algunas variaciones en el bucle. Un simple bucle solo mostrará todas las publicaciones en el orden que ha especificado en los argumentos de su consulta (o por fecha en orden descendente de forma predeterminada). Si te separas if ($ consulta-> have_posts ()) y while ($ consulta-> have_posts ()), puede insertar un marcado adicional fuera de su bucle, pero solo si su consulta ha devuelto datos. Y finalmente, especificando argumentos alternativos y utilizando wp_reset_postdata () después de cada bucle, puedes usar WP_Query Más de una vez para crear múltiples bucles en tu página..