Como mencioné en la introducción de esta serie, el WP_Query
La clase tiene cuatro elementos principales:
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..
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 ()
.
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.
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 '
Esto comprueba si la consulta ha obtenido alguna publicación, y si es así, abre el ul
elemento y luego ejecuta el bucle.
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 '
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.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.
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..