¿Cómo utilizar la clase WP_Query en WordPress?

Publicado: 2024-08-09

Tabla de contenido
¿Qué es WP_Query?
Una breve nota sobre WP_Query
¿Cómo se puede utilizar WP_Query?
WP_Query Vs query_posts(): ¿Cuál es preferible?
Algunos ejemplos de uso de WP_Query
Conclusión

¿Qué es WP_Query?

WP_Query es una poderosa clase PHP en WordPress que le permite crear consultas personalizadas al conjunto de datos para recuperar publicaciones y otro contenido y representarlos en la página. Proporciona una forma flexible y eficiente de interactuar con la base de datos y recuperar contenido según varios criterios.


Una breve nota sobre WP_Query

Es posible que sepa que WordPress almacena todos los datos de su sitio web, como publicaciones, páginas, comentarios o configuraciones, en la base de datos MySQL.

Entonces, para cualquier persona que visite su sitio web, se envía inmediatamente una solicitud a esta base de datos, recuperando los datos solicitados, ya sean publicaciones o páginas para mostrar en su pantalla.

Pero le sorprenderá saber que con la ayuda de WP_Query, puede crear consultas que pueden ayudarle a recuperar información específica de su base de datos. Entonces, cada vez que alguien busca su contenido, WordPress usa esta clase incorporada.

Sin duda, todavía puedes usar SQL para escribir todas estas consultas, pero es bastante difícil y no es la forma más fácil de hacerlo. Por otro lado, WP_Query es mucho más sencillo.

WP_Query es tan útil que puede crear consultas personalizadas para mostrar contenido específico en su sitio web sin que el visitante tenga que buscarlo.

En resumen, WP_Query es una herramienta que facilita a los desarrolladores controlar qué contenido se muestra en los sitios de WordPress y cómo se ve, sin necesidad de escribir código complicado.

Suponga que crea un tipo especial de contenido en WordPress llamado "blog". Para mostrar estas publicaciones de "blog" en su sitio, puede escribir una consulta especial usando WP_Query.

// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);

Ahora, para mostrar la consulta solicitada, WP_Query proporciona accesos directos y funciones integradas que le ayudan a personalizar el bucle. The Loop es un fragmento de código PHP que WordPress utiliza para mostrar publicaciones en una página.

WordPress procesa y formatea cada publicación de acuerdo con los criterios que establezca en WP_Query (como el tipo de publicación, la cantidad de publicaciones y la categoría).

Esta poderosa herramienta ayuda a los desarrolladores a personalizar fácilmente la forma en que los temas de WordPress muestran el contenido sin tener que escribir consultas complejas a la base de datos.


WPOven Dedicated Hosting

¿Cómo se puede utilizar WP_Query?

Ahora sabes qué es WP_Query y qué hace exactamente. Veamos diferentes escenarios de casos en los que puede utilizar esta poderosa herramienta.

1. Crear bucle en WP_Query

Primero, debes entender qué es Loop. Es una parte de WordPress que tiene una gran capacidad de respuesta para obtener datos de publicaciones a partir de los datos y los muestra en su sitio web. Se centra principalmente en decidir cómo se ve su contenido en función de las plantillas de su tema.

¿Qué puede mostrar el Loop en el sitio web?

Dependiendo de la configuración que elija, el Loop puede mostrar:

  • Tipos de publicaciones personalizadas y campos personalizados
  • Publique títulos y descripciones breves en su página de inicio.
  • Contenido y comentarios de una sola publicación.
  • Contenido de páginas individuales usando etiquetas de plantilla

Para su mejor comprensión, a continuación se muestra una estructura simple de Loop.

Ejemplo de bucle básico

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

  • Aquí, la función have_posts() comprueba si hay publicaciones disponibles.
  • while ( have_posts() ) : the_post(); : Si hay publicaciones, este bucle se ejecutará para cada publicación y mostrará su contenido.

Personalizando el bucle con WP_Query

A veces, no deseas mostrar todas tus publicaciones. Puedes usar WP_Query para personalizar lo que se muestra:

<?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();
?>

Cómo funciona este bucle personalizado

  • Configurando la consulta : $the_query = new WP_Query( $args ); crea una consulta personalizada basada en los parámetros que establezca (como tipo de publicación, categoría, etc.).
  • Ejecutando el bucle : if ( $the_query->have_posts() ) { ... } comprueba si hay publicaciones que coincidan con su consulta. Si los hay, muestra el título de cada publicación en una lista.
  • Restablecer datos de publicación : wp_reset_postdata(); garantiza que los datos de la publicación original se restablezcan después de que se ejecute el bucle personalizado.

Opciones de personalización

Con WP_Query, puedes:

  • Mostrar publicaciones de una categoría, autor o rango de fechas específico
  • Mostrar publicaciones con ciertas etiquetas o campos personalizados

2. Argumentos de WP_Query

Cuando desee obtener publicaciones específicas de su sitio de WordPress, debe crear WP_Query y, para ello, debe incluir cuatro partes básicas:

  • Argumento de consulta : le dice a WordPress qué datos recuperar.
  • La consulta : utiliza el argumento para recuperar los datos.
  • The Loop : Procesa y muestra cada publicación.
  • Restablecer datos posteriores : restablece los datos después de que se ejecuta el ciclo.

Pero uno de los componentes más esenciales de WP_Query es el argumento (a menudo llamado argumentos de WP_Query) que es responsable de extraer la publicación específica que desea obtener de la base de datos.

Es tan importante que, en lugar de mostrar todas las publicaciones, el argumento establezca condiciones para mostrar solo determinadas publicaciones.

Ejemplo de un argumento

  • La línea $args : aquí es donde incluye el argumento de su consulta.
  • Estructura : colocas ciertos parámetros en una matriz. He aquí un ejemplo básico,

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

Ejemplo específico

Si desea mostrar publicaciones con la etiqueta 'Errores de WordPress', debe configurar su argumento de consulta de esta manera:

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

Por qué el argumento es esencial

  • Sin argumento, sin contenido : si no incluye un argumento WP_Query, WordPress no sabrá qué publicaciones mostrar. Su consulta no recuperará ningún contenido de la base de datos.

3. Establecer los parámetros de WP_query

Los parámetros son algo que hace que WP_Query sea útil y poderoso. Con la variedad de ellos disponibles, resulta fácil para cualquiera filtrar las búsquedas en la base de datos.

Por ejemplo, cuando desea mostrar publicaciones específicas en su sitio de WordPress, usa WP_Query y, para asegurarse de obtener la publicación correcta, puede establecer parámetros. Es posible que tenga otra pregunta en mente: ¿Cuáles son los parámetros?

Bueno, los parámetros son como instrucciones que le dicen a WordPress qué tipo de publicaciones obtener de la base de datos.

Ejemplos de parámetros comunes

A continuación se muestran algunos parámetros comunes que puede utilizar:

  • cat : muestra publicaciones de categorías específicas.
  • autor : muestra publicaciones de uno o más autores específicos.
  • post_status : muestra publicaciones que están en progreso, programadas, publicadas o eliminadas.
  • orderby : Ordena las publicaciones por autor, tipo de publicación, fecha, etc.
  • posts_per_page : establece el número de publicaciones que se mostrarán.
  • etiqueta : muestra publicaciones con etiquetas específicas.
  • orden : Ordena las publicaciones en orden ascendente o descendente.
  • post_type : define si se muestran publicaciones, páginas o tipos de publicaciones personalizadas.

Cómo utilizar los parámetros

Si desea mostrar publicaciones de una categoría determinada, puede utilizar el parámetro category_name . He aquí un ejemplo:

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

Esto mostrará todas las publicaciones en la categoría "personal" y cualquier subcategoría.

Ejemplo más complejo

En este ejemplo, demostramos cómo puede utilizar múltiples valores en diferentes argumentos para crear una consulta compleja y personalizada para recuperar las publicaciones exactas que desea.

Recuperaremos publicaciones que estén en categorías específicas, tengan ciertas etiquetas, estén escritas por autores específicos y estén ordenadas por fecha en orden descendente.

$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);

$query = new WP_Query($args);

// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}

// Restore original Post Data
wp_reset_postdata();

  • categoría__in : ayuda a especificar que queremos publicaciones de categorías con ID 5 y 10.
  • tag__in : especifica que queremos publicaciones etiquetadas como "destacadas" o "populares".
  • Author__in : especifica que queremos publicaciones de autores con ID 1 y 2.
  • orderby : Especifica que queremos ordenar las publicaciones por la fecha en que fueron publicadas.
  • orden : Especifica que queremos las publicaciones en orden descendente (las más recientes primero).
  • posts_per_page : limita el número de publicaciones recuperadas a 10.

4. Modificar objetos con métodos y propiedades de clase

En WordPress, WP_Query es una clase PHP especial que se utiliza para recuperar publicaciones de la base de datos. Piense en ello como una herramienta que le ayuda a obtener las publicaciones exactas que desea mostrar en su sitio web.

¿Qué son las propiedades y los métodos de clase?

En PHP, una clase puede tener propiedades (como variables) y métodos (como funciones). He aquí una forma sencilla de entenderlos:

  • Propiedades : Son como contenedores que contienen información. En el contexto de WP_Query , las propiedades pueden incluir cosas como la lista de publicaciones o la cantidad de publicaciones encontradas.
  • Métodos : son como herramientas o acciones que puedes realizar. En WP_Query , los métodos pueden ayudarlo a verificar si hay publicaciones, obtener el título de una publicación o restablecer la consulta.

¿Se pueden cambiar las propiedades directamente?

No, no puede cambiar las propiedades directamente, incluso los desarrolladores desaconsejan esto, pero puede usar métodos alternativamente.

Los métodos son como herramientas o comandos oficiales que te ayudan a seguir el camino correcto. Esto es exactamente lo que funciona como las funciones; cuando realiza ciertos cambios en los métodos de WP_Query, también puede personalizar los datos que se obtienen.

Ejemplo de uso de métodos en WP_Query

En este ejemplo, una función reset_postdata() puede ser un paso crítico al escribir su WP_Query. Este método restablecerá las propiedades de $current_post y $post.

<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>

<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

Descomponer:
  • Creando una consulta :
    • $the_query = new WP_Query($args); : Crea un nuevo objeto WP_Query con los argumentos que proporcionaste.
  • Comprobando publicaciones :
    • if ($the_query->have_posts()) : comprueba si hay publicaciones para mostrar según su consulta.
  • Recorriendo publicaciones :
    • while ($the_query->have_posts()) : $the_query->the_post(); : Configura los datos de la publicación para que puedas mostrarlos.
  • Mostrando publicaciones :
    • the_title(); y the_excerpt(); : Muestra el título y el extracto de la publicación actual.
  • Restablecer datos de publicación :
    • wp_reset_postdata(); : Restablece los datos de la publicación global a la publicación de la consulta principal. Esto es importante para evitar estropear otras partes de su página.

Métodos comunes que puede utilizar

A continuación se muestran algunos métodos comunes en WP_Query que puede utilizar para trabajar con su consulta:

  • get_posts :
    • Qué hace : recupera una lista de publicaciones.
    • Ejemplo : phpCopiar código $posts = get_posts(array('category' => 'news'));
  • have_posts :
    • Qué hace : comprueba si hay publicaciones para mostrar.
    • Ejemplo : phpCopiar código if ($the_query->have_posts()) { // There are posts to show }
  • the_post :
    • Qué hace : configura los datos de la publicación actual.
    • Ejemplo : phpCopiar código $the_query->the_post();
  • fill_query_vars :
    • Qué hace : completa los detalles de consulta que faltan.
    • Ejemplo : phpCopiar código $the_query->fill_query_vars($args);

Al proporcionar a WP_Query la información correcta, puede personalizarlo para realizar diferentes tareas. Este método es una forma flexible y segura de ajustar las propiedades de la clase.


WP_Query Vs query_posts(): ¿Cuál es preferible?

A continuación se muestra una tabla comparativa detallada de WP_Query frente a query_posts() en WordPress, que incluye algunos de los puntos principales que pueden ayudarle a comprender por qué generalmente se prefiere WP_Query a query_posts() :

Característica WP_Query publicaciones_query()
Objetivo Cree consultas personalizadas para recuperar publicaciones de la base de datos. Modifique la consulta principal en la página (no recomendado para uso general).
Uso principal Ideal para crear nuevas consultas y mostrar publicaciones de forma personalizada. Generalmente se utiliza para modificar la consulta principal, pero no se recomienda.
Uso recomendado Sí, es la forma recomendada de buscar y mostrar publicaciones. No, es mejor evitar el uso de esta función dentro del bucle principal, los complementos y los temas.
Efecto en la consulta principal No afecta la consulta principal. Puede ejecutar consultas personalizadas sin cambiar el bucle principal. Anula por completo la consulta principal, lo que puede provocar conflictos o resultados inesperados.
Restablecer datos de publicación Utilice wp_reset_postdata() para restaurar la consulta original después de ejecutar una consulta personalizada. No hay una función equivalente, lo que significa que es posible que tengas que restaurar manualmente los datos de publicación de la consulta principal.
Manejo de múltiples consultas Puede manejar múltiples consultas y está diseñado para escenarios complejos. Maneja solo una consulta y cambia la consulta principal, lo que puede resultar problemático para consultas múltiples.
Impacto en el rendimiento Generalmente es mejor para el rendimiento ya que no altera la consulta principal. Puede ser menos eficiente y causar problemas debido a su impacto en la consulta principal.
Ejemplos de consultas personalizadas $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); query_posts(array('post_type' => 'post', 'posts_per_page' => 5));
Ejemplo de restablecimiento de datos <?php wp_reset_postdata(); ?> No hay función de reinicio, se necesita un reinicio manual si se realizan cambios en la consulta principal.
Facilidad de uso Fácil de usar con métodos y funciones integrados para consultar publicaciones y páginas. Es menos sencillo y puede generar problemas si no se usa con cuidado.
WP_Query frente a query_posts()

WPOven Dedicated Hosting

Algunos ejemplos de uso de WP_Query

Para comprender mejor WP_Query y su uso práctico, consulte algunos de los ejemplos que se muestran a continuación:

1. Mostrar las últimas publicaciones publicadas esta semana

Si tiene una buena base de usuarios o una cantidad decente de tráfico web, significa que a sus visitantes les gusta su contenido y querrán leer los últimos artículos publicados en su sitio.

Mientras diseña su sitio web, puede presentar publicaciones recientes en una sección dedicada de la página web. Afortunadamente, con WP_Query, puedes encontrar fácilmente publicaciones basadas en parámetros de fecha. Veamos cómo.

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

En este ejemplo, creamos un WP_Query para buscar publicaciones publicadas en la semana actual. Usamos una parte especial de WP_Query llamada date_query para especificar nuestros criterios de búsqueda.

El objetivo principal de la consulta era encontrar publicaciones publicadas durante la semana actual. Y para eso, usamos el parámetro date_query para buscar publicaciones basadas en fechas. Se necesita una serie de argumentos relacionados con la fecha.

Entonces, cuando personaliza el parámetro date_query , puede buscar y mostrar publicaciones que se hayan publicado recientemente. Sin embargo, también puede especificar valores personalizados para que la consulta sea más efectiva y resaltar los últimos artículos escritos la semana pasada.


2. Mostrar la última publicación en una categoría específica

Los visitantes de su sitio web a menudo pueden buscar la información más reciente y, para aumentar la participación y las visitas a la página, es una buena práctica sugerir algunas publicaciones más relacionadas que podrían gustarles.

Aunque hay muchas formas de vincular publicaciones relacionadas en WordPress, WP_Query es una de las formas eficientes de hacerlo. Especialmente una excelente manera para el sitio web que siempre publica contenido actualizado.

Por ejemplo, si alguien lee un artículo sobre errores de WordPress, WP_Query puede ayudar a mostrar otros artículos similares y recientes.

Entonces, si desea obtener las últimas publicaciones en una categoría específica, use este WP_query y realice pequeñas modificaciones que incluyan la información de su sitio:

<?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 );

?>


3. Mostrar las publicaciones del mismo autor y en la misma categoría.

Es muy posible que si al visitante le gusta su contenido, le gusten las opiniones, el estilo de escritura y la percepción del autor.

Para ello, puede utilizar WP_Query para sugerir a sus lectores publicaciones similares escritas por el mismo autor. La consulta buscará las publicaciones escritas por el mismo autor para la misma categoría que la publicación actual.

Para esto, tenemos que crear una cadena WP_Query específica, que buscará publicaciones con autores similares y la misma categoría.

Aquí está el código:

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

En el código anterior, debes reemplazar "Rahul" con el nombre del autor y "WordPress" con el nombre de la categoría.


4. Muestra tus publicaciones más populares

Al igual que las publicaciones más recientes o recientes que ha mostrado a sus lectores. También es posible que desees mostrar publicaciones sobre temas que les gusten a tus lectores y que les interesen mucho. Para lograr esto, puede usar el parámetro orderby y pasarlo al argumento comment_count .

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

El WP_Query anterior buscará publicaciones en la categoría "Errores de WordPress" y filtrará los resultados por la cantidad de comentarios que tiene cada publicación.

El resultado mostrará cinco publicaciones con la mayor cantidad de comentarios, en orden descendente de izquierda a derecha, comenzando con la publicación con mayor participación y terminando con la más baja.


Conclusión

Ahora ha sido testigo de lo poderoso que es WP_Query y de cómo le facilita realizar solicitudes de bases de datos en WordPress. Además, le brinda la flexibilidad de personalizar su sitio y brindar una experiencia única a los visitantes.

Para usar WP_Query, puedes:

  • Crea un bucle: muestra tus publicaciones.
  • Utilice argumentos de consulta: personalice sus búsquedas.
  • Establezca parámetros específicos: filtre sus resultados.
  • Modificar propiedades de clase: ajustar los resultados de la consulta con métodos.

Si domina todas estas técnicas, podrá recomendar fácilmente publicaciones específicas en función de varios factores, como la popularidad y la fecha.

Esta técnica ayuda a aumentar la participación del usuario, mejorar la experiencia del usuario y también ayuda a sus visitantes leales a encontrar contenido más relevante.

Si todavía tiene dudas sobre WP_Query o le gustaría agregar más contenidos que quizás nos hayamos perdido. Háganoslo saber en la sección de comentarios a continuación.