Conceptos básicos sobre el uso de WP_Query en WordPress + ejemplos con código

Por defecto, WordPress ordena automáticamente tus entradas de la más reciente a la más antigua. Aunque los visitantes pueden buscar entradas específicas mediante categorías y etiquetas, es posible que no encuentren el contenido que buscan. Para organizar tus entradas, puedes utilizar WP_Query de WordPress.

Usando WP_Query, puedes personalizar la visualización de las entradas y páginas de tu sitio web. Esta clase PHP te permite simplificar las peticiones complejas a la base de datos. Como desarrollador o propietario de un sitio web, puede ayudarte a personalizar las páginas más allá de tu tema por defecto.

En este artículo, explicaremos qué es WP_Query. Luego, te mostraremos cómo usarlo en tu sitio web de WordPress. Finalmente, te daremos algunos ejemplos de formas de implementarlo en tu blog. ¡Empecemos!

Introducción a WP_Query

En WordPress, los datos de tu sitio se almacenan en una base de datos MySQL. Esto incluye todo, desde las entradas, las páginas y los comentarios, hasta los ajustes de configuración.

Cuando un visitante hace clic en tu sitio web, esto envía una solicitud a tu base de datos de WordPress. Tu base de datos recupera entradas y páginas específicas para mostrarlas en función de esta consulta.

Como propietario de un sitio web, puedes aprovechar las consultas para obtener información específica de tu base de datos. Aunque puedes construir consultas SQL, no es la forma más eficiente de recuperar datos. Aquí es donde entra WP_Query.

WP_Query es una clase PHP que puedes usar para construir consultas para tu base de datos. En WordPress, esta es una clase incorporada que se produce cada vez que alguien busca tu contenido.

Ejemplo al hacer una consulta con la palabra "WordPress hosting" y los resultados que trae

Sin embargo, implementar una consulta personalizada en WordPress puede permitir a los usuarios encontrar un contenido específico sin tener que buscarlo. Si necesitas mostrar un grupo particular de entradas en el front end de tu sitio, puedes hacerlo fácilmente usando un tipo de entrada personalizada WP_Query.

Por ejemplo, crear un tipo de entrada personalizada de WordPress. Para mostrar estas entradas, debes escribir una consulta específica. Esta es la estructura básica de código que puedes utilizar:

// WP QUERY
$query = new WP_Query([
'post_type' => 'press-release'
"posts_per_page => 25,
'category_name' => 'health',
]);

Esto funciona mediante la personalización del Bucle. Esencialmente, el Bucle es el código PHP que WordPress utiliza para mostrar ciertas entradas. WordPress sabe cómo procesar y dar formato a cada entrada basándose en los criterios especificados en tu tipo de entrada personalizada WP_Query.

WP_Query también es útil para los desarrolladores. Puedes personalizar los temas de WordPress usando esta clase PHP sin consultar directamente la base de datos.

Cómo utilizar WP_Query de WordPress (4 maneras)

Ahora que ya conoces WP_Query, vamos a crear tu primera consulta. De esta forma, podrás personalizar la visualización de tu sitio web de forma rápida y sencilla.

1. Crear un loop o bucle

Para empezar, tendrás que estar familiarizado con el Bucle de WordPress. Como hemos mencionado antes, el Bucle es responsable de extraer los datos de las entradas de la base de datos. Determina cómo se muestra el contenido de acuerdo con los archivos de plantilla de tu tema.

Basado en los parámetros que establezcas, esto es lo que el Bucle puede mostrar:

  • Contenido de tipos de entradas personalizadas y campos personalizados de WordPress.
  • Títulos de entradas y extractos en tu página de inicio.
  • El contenido y los comentarios de una sola entrada.
  • Contenido de una página individual utilizando etiquetas de plantilla.

Antes de personalizar el bucle con WP_Query, necesitarás conocer la estructura del bucle. Aquí hay un ejemplo de un bucle básico:

<?php
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        // Display post content
    endwhile;
endif;
?>

Vamos a desglosar las partes individuales de este bucle. En primer lugar, la función have_posts() comprobará si hay entradas en tu sitio. Si es así, la condición while continúa el bucle para cada entrada. Esencialmente, esto informa a tu base de datos para que muestre cualquier entrada en tu sitio web.

Sin embargo, es posible que no quieras mostrar todas tus entradas. Insertando el código WP_Query en el bucle, puedes habilitar a WordPress para que sólo muestre ciertas entradas:

?php
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

Contiene la misma estructura básica de bucle que las condiciones if o while. Sin embargo, hay una cadena adicional de WP_Query.

Puedes personalizar el bucle para que sólo muestre las entradas asociadas a una taxonomía, categoría o autor específico de WordPress según los parámetros que hayas establecido. También puedes restringir los resultados por fecha, etiquetas, campos personalizados y más. En otras palabras, cuando se trata de personalizar el Bucle con WP_Query, hay muchas rutas posibles.

2. Utilizar argumentos

Al estructurar tu WP_Query, debes incluir cuatro elementos básicos:

  • Argumento de la consulta
  • Consulta en sí misma
  • El loop o bucle
  • Reinicio de datos posteriores

Una de las partes más críticas de tu consulta es el argumento (conocido como WP_Query args). El argumento informa a WordPress de los datos que quieres recuperar de la base de datos. En lugar de mostrar todo el contenido de tu entrada, el argumento pondrá algunas condiciones en tu bucle.

Probablemente hayas notado la línea ($args) en el ejemplo anterior. Aquí es donde incluirás tu argumento de consulta.

Para estructurar tus argumentos de WP_Query, necesitarás colocar ciertos parámetros en un array. Hablaremos de los parámetros en la siguiente sección, pero aquí está el aspecto de un argumento básico:

$args = array(
    'parameter1' => 'value',
    'parameter2' => 'value',
    'parameter3' => 'value'
);

Por ejemplo, si quieres mostrar las entradas que tienen una etiqueta «cocina«, así es como puedes codificar tu argumento:

$query = new WP_Query( array( 'tag' => 'cooking' ) );

Si no incluyes un argumento WP_Query, este no sacará ningún contenido de tu base de datos. Sin esta información, WordPress no sabrá qué entradas mostrar.

3. Establecer parámetros

Como mencionamos anteriormente, establecer parámetros es importante para personalizar WP_Query. Puedes permitir que WordPress recupere una colección personalizada de entradas de tu base de datos especificando esta información.

Si no estás seguro de qué parámetros incluir en tu argumento, WordPress proporciona ejemplos para muchos usos diferentes. Como estos ya están codificados para ti, esto puede ahorrarte tiempo y esfuerzo cuando construyas tu WP_Query.

Estos son algunos de los parámetros más comunes que puedes utilizar:

  • Posts_per_page: establece el número de entradas que deseas mostrar.
  • Author: acota los resultados por uno o más autores.
  • Cat: especifica las categorías a las que deben pertenecer los resultados.
  • Tag: extrae las entradas que tienen etiquetas específicas.
  • Orderby: ordena los resultados por autor, tipo de entrada, fecha, etc.
  • Order: ordena los resultados en orden ascendente o descendente.
  • Post_type: define si la consulta debe recuperar entradas, páginas o tipos de entradas personalizadas.
  • Post_status: especifica si las entradas están en proceso, programadas, publicadas o eliminadas.

Por ejemplo, es posible que necesites mostrar las entradas de una determinada categoría. En este caso, puedes incluir el nombre de la categoría y el slug:

$query = new WP_Query( array( 'category_name' => 'staff' ) );

Esto sacará las entradas bajo esta categoría WP_Query y cualquier hijo de esta categoría.

Usando diferentes parámetros, también puedes mostrar las entradas de una fecha específica. Para mostrar el contenido de las 9 AM a las 5 PM en días de semana, este es el parámetro que debes utilizar:

$args = array(
    'date_query' => array(
        array(
            'hour'  	=> 9,
            'compare'   => '>=',
        ),
        array(
            'hour'  	=> 17,
            'compare'   => '<=',
        ),
        array(
            'dayofweek' => array( 2, 6 ),
            'compare'   => 'BETWEEN',
        ),
    ),
    'posts_per_page' => -1,
);
$query = new WP_Query( $args );

El número de parámetros que puedes utilizar es prácticamente ilimitado. Al incluir estas condiciones personalizadas en tus argumentos, tu WP_Query puede presentar con éxito los datos correctos.

4. Modificar las propiedades de la clase con métodos

Como WP_Query es una clase PHP, contiene constantes llamadas propiedades. Estas son variables para la clase PHP.

Los desarrolladores de WordPress recomiendan no alterar las propiedades de WP_Query directamente. Sin embargo, puedes usar métodos para interactuar con ellas.

Los métodos funcionan de forma similar a las funciones. Cuando modificas los métodos de WP_Query, puedes personalizar los datos que se recuperan.

En la documentación de WP_Query, hay muchas funciones listadas para tareas básicas. Por ejemplo, incluir una función reset_postdata() puede ser un paso importante al escribir tu WP_Query. Este método restablecerá las propiedades de $current_post y $post.

Esto es lo que podría parecer:

<?php
// the query
$the_query = new WP_Query( $args ); ?>
 
<?php if ( $the_query->have_posts() ) : ?>
 
    <!-- pagination here -->
 
    <!-- the loop -->
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>
    <!-- end of the loop -->
 
    <!-- pagination here -->
 
    <?php wp_reset_postdata(); ?>
 
<?php else : ?>
    <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

En última instancia, tendrás que utilizar este método si utilizas la función_post() en tu consulta. Esto asegura que las etiquetas de la plantilla utilicen la entrada actual de la consulta principal.

Aquí hay algunos métodos adicionales que puedes usar para modificar las propiedades de tu WP_Query:

  • get_posts: recupera una matriz de posts basada en las variables dadas.
  • have_posts: determina si los posts están disponibles en el Bucle.
  • generate_postdata: muestra los posts.
  • fill_query_vars: completa las variables de consulta que no figuran en los parámetros.

Según la información que proporciones, puedes personalizar tu WP_Query para que realice la función necesaria. Esta puede ser una forma flexible y segura de modificar las propiedades de la clase.

Ejemplos de WP_Query

Una vez que aprendas los fundamentos de WordPress WP_Query, puedes empezar a utilizarlo para personalizar el diseño de tu sitio web. Como hay varios parámetros que puedes definir, las opciones son casi infinitas.

¡Vamos a discutir algunos ejemplos comunes de WP_Query para darte algo de inspiración!

1. Últimas entradas en una categoría determinada

Por lo general, los usuarios de Internet están más interesados en contenidos nuevos. Después de que los visitantes lean una de tus entradas, querrás ofrecerles algún contenido relacionado. Al recomendar entradas similares y más recientes, puedes dirigir a los usuarios a otros contenidos que podrían disfrutar.

Esta WP_Query puede ser especialmente útil para los sitios web que tienen entradas sensibles al tiempo. Por ejemplo, los visitantes podrían leer un artículo científico sobre la pérdida de memoria. Usando WP_Query, puedes destacar temas similares con investigaciones actualizadas:

Ejemplo de visualización de artículos recomendados y relacionados dependiendo la categoría

Si quieres sacar las últimas entradas de una categoría específica, pega esta WP_Query:

<?php
 
// Get the current post id.
$current_post_id = get_the_ID();
 
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
 
// Setup arguments.
$args = array(
    // Get category's posts.
    'cat' => $current_post_first_cat_id,
    // Exclude current post.
    'post__not_in' => array( $current_post_id )
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

Después de editar esta consulta con la información de tu sitio, puedes mostrar entradas similares a la que el visitante acaba de leer. Esto puede guiar eficazmente al usuario hacia información relevante y actual sin necesidad de buscarla.

2. Entradas publicadas esta semana

Si tienes muchos seguidores, los lectores querrán leer tus artículos más recientes tan pronto como se publiquen. Si diseñas tu sitio web para que incluya los artículos más recientes, podrás ofrecer la información más relevante. 

Especialmente si tienes un sitio de noticias, tendrás que organizar tus entradas de la más reciente a la más antigua. Hacer esto puede permitir a los usuarios encontrar rápida y fácilmente el contenido sensible al tiempo.

Ejemplo de visualización de últimos artículos organizados según fecha de publicación

Usando WP_Query, puedes establecer parámetros basados en la fecha de un artículo. Al recuperar sólo las entradas publicadas en la última semana, puedes evitar que los usuarios vean artículos desactualizados:

<?php  
   $arguments = array(
      "date_query" => array(
         array(
           "year" => date( "Y" ),
           "week" => date( "W" ),
         )
      )
   );
   $posts = new WP_Query($arguments);
?>

Al personalizar el parámetro date_query, puedes dirigir a los artículos publicados recientemente. Aunque puedes incluir tus propios valores personalizados, puede ser eficaz para destacar los artículos escritos en la última semana.

3. Entradas populares por número de comentarios

Del mismo modo, puedes promocionar las entradas que hayan gustado a la mayoría de tu audiencia. Al informar a los usuarios de que otra entrada recibió mucha participación, puede animarles a hacer clic allí para obtener más información.

Dado que WordPress no lleva un registro del número de visualizaciones de las entradas, es probable que tengas que añadir esta funcionalidad tú mismo. Puedes hacerlo con un plugin, pero esto puede ralentizar tu sitio.

Con WP_Query, puedes sugerir otras entradas populares según tu número de comentarios. Esto hace que sea fácil mostrar tus artículos más populares:

Ejemplo de sugerencias de entradas que son populares debido al número de comentarios

Estos son los datos que puedes utilizar para estructurar tus recomendaciones basadas en la popularidad:

<?php
 
// Setup arguments.
$args = array(
    // Order by comment count.
    'orderby' => 'comment_count'
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

También puedes acotar estos resultados en función de una determinada categoría. Simplemente añade un parámetro con el nombre de tu categoría:

<?php  
   $arguments = array(
      "category_name" => "fiction",
      "orderby" => "comment_count",
      "posts_per_page" => 5,
   );
   $posts = new WP_Query($arguments);
?> 

Esto también limitará las recomendaciones a cinco entradas. Si es necesario, puedes editar este valor con un número diferente.

4. Entradas del mismo autor y categoría

Cuando los visitantes leen la entrada de tu blog, puede que les guste mucho ese contenido. Puede que simplemente prefieran el estilo de escritura del autor o el tema general.

En este caso, puedes utilizar WP_Query para ofrecer recomendaciones de artículos similares. De esta manera, los lectores pueden hacer clic en los artículos adicionales para seguir leyendo:

Visualización de entradas sugeridas del mismo autor

Para construir una fila de entradas similares, necesitarás implementar una cadena específica de WP_Query. Esto buscará entradas de blog en tu sitio web que tengan el mismo autor y categoría de entrada.

Aquí está el código que puedes utilizar:

<?php  
   $arguments = array(
      "author_name" => "john",
      "category_name" => "fiction",
      "posts_per_page" => 3,
   );
   $posts = new WP_Query($arguments);
?>

Al implementar este código, deberás reemplazar «john» por el nombre del autor. A continuación, elimina «ficción» e incluye la etiqueta de tu categoría. Por último, no dudes en modificar el número de recomendaciones de entradas que se muestran en la página.

5. Entradas anuales del autor

Si tienes un blog destacado, es probable que tengas muchos autores diferentes que escriben entradas. Después de que alguien lea una de tus entradas, es posible que quiera encontrar más entradas de ese autor con mayor facilidad.

En este caso, puedes hacer una lista de las entradas de un autor del año pasado. Esto puede dar a los visitantes información sobre el autor y una lista de sus escritos anteriores:

Visualización de entradas por autor pero del año inmediatamente anterior

Para desarrollar una lista de las entradas anuales de un autor, puedes utilizar esta WP_Query:

<?php
 
// Get the year we're in.
$current_year = date( 'Y' );
 
// Setup arguments.
$args = array(
    // Get the author with the nicename "john".
    'author' => 'john',
    // Get his posts from this year.
    'year'   => $current_year
);
 
// Instantiate new query instance.
$my_query = new WP_Query( $args );
 
?>

Estos datos extraerán todas las entradas escritas por un autor específico. También refinará estos resultados basándose en el año actual. Por ejemplo, no mostrará ningún artículo publicado hace más de un año.

6. Vista previa de las entradas programadas

Para dar a tu audiencia un adelanto de los próximos contenidos, puedes listar tus entradas programadas en tu sitio web. Usando WP_Query, puedes mostrar el título y los extractos de tus nuevas entradas.

Esto puede ayudar a generar interés en tus artículos antes de publicarlos. Además, es fácil de implementar con WP_Query:

<?php
 
/*
 * Usage with Excerpts:
 *
 * <?php echo tutsplus_show_drafts(); ?>
 *
 * Usage without Excerpts:
 *
 * <?php echo tutsplus_show_drafts( false ); ?>
 */
 
function tutsplus_show_drafts( $show_excerpts = true ) {
 
    // Setup arguments.
    $args = array(
        'post_status' => 'future',
        'nopaging' => true
    );
 
    // Instantiate new query instance.
    $my_query = new WP_Query( $args );
 
    // Check that we have query results.
    if ( $my_query->have_posts() ) {
 
        // Begin generating markup.
        $output = '<section class="pending-posts">';
 
        // Start looping over the query results.
        while ( $my_query->have_posts() ) {
 
            $my_query->the_post();
 
            // Output draft post title and excerpt (if enabled).
            $output .= '<div class="pending">';
                $output .= '<h3 class="pending-title">' . get_the_title() . '</h3>';
                    $output .= get_the_title();
                $output .= '</h3>';
 
                if ( $show_excerpts ) {
 
                    $output .= '<div class="pending-excerpt">';
                        $output .= get_the_excerpt();
                    $output .= '</div>';
 
                }
 
            $output .= '</div>';
 
        }
 
        // End generating markup.
        $output .= '</section>';
 
    } else {
 
        // Let user know that nothing was found.
        $output = '<section class="drafts-error">';
            $output .= '<p>' . __( 'Nothing found', 'tutsplus' ) . '</p>';
        $output .= '</section>';
 
    }
 
    wp_reset_postdata();
 
    return $output;
 
}
 
?>

Esto configurará automáticamente una vista previa de los títulos de tus entradas programadas. También puedes incluir un extracto si es necesario.

Conclusión

WP_Query proporciona una forma más sencilla de realizar peticiones a la base de datos de WordPress. Usando esta clase PHP, puedes personalizar la visualización de tu sitio y ofrecer una experiencia única a cada visitante online.

Estas son las cuatro formas para utilizar WP_Query en WordPress:

  • Crear un bucle.
  • Utilizar argumentos de consulta.
  • Establecer parámetros específicos.
  • Modificar las propiedades de la clase.

Cuando hayas aprendido estas técnicas de WP_Query para WordPress, podrás recomendar entradas específicas basadas en la popularidad, la fecha, el autor y mucho más. Si tienes más preguntas sobre WP_Query, no dudes en dejar un comentario abajo. Asegúrate de utilizar un alojamiento de WordPress fiable para que el rendimiento del sitio sea de primera categoría.

Author
El autor

Diana Catalina Herrera Infante

Diana es una traductora con amplia experiencia en diferentes tipos de documentos, entre ellos tutoriales y artículos especializados en la creación de sitios web. Además, cuenta con experiencia en el área de marketing digital. En su tiempo libre le gusta hacer ejercicio y ver una buena película.