Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Combinando WP_Query con la consulta principal

by
Read Time:5 minsLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: 10 Useful Examples
Mastering WP_User_Query

Spanish (Español) translation by Andrea J (you can also view the original English article)

Hasta ahora, en esta serie, has aprendido a usar WP_Query para crear consultas personalizadas y usarlas en tu tema o en tus plugins.

En la mayoría de los casos, usarás WP_Query con un conjunto de argumentos completamente nuevo que está separado del de la consulta principal, pero ¿qué sucede si quieres incluir la consulta principal en tus argumentos?

Estos son algunos ejemplos de cuándo es posible que lo hagas:

  • En una página de categoría o clasificación, mostrando solo las publicaciones de un tipo de publicación.
  • En una página de categoría, mostrando las publicaciones con la categoría actual y otra categoría o una etiqueta o término de clasificación.
  • En una página para un tipo de publicación, simplemente mostrando publicaciones con ciertos metadatos.

Podría continuar enumerando los ejemplos ya que hay muchas formas de combinar la consulta principal con tu propia consulta personalizada.

Voy a demostrar esto con tres ejemplos: el primero será un ejemplo simple con un bucle; el segundo usará foreach para generar múltiples bucles, uno para cada tipo de publicación; y el tercero generará dos tipos de publicaciones en un archivo de categorías mediante el uso de dos consultas independientes.

Definición de una variable basada en la consulta principal

Debes almacenar el objeto de la consulta actual de una manera que facilite su uso en tus argumentos de WP_Query. Sin embargo, vas a combinar tu consulta principal con WP_Query. La forma más fácil de hacerlo es asignándola a una variable.

Haz esto antes de definir tus argumentos WP_Query, así:

La función get_queried_object() retorna el objeto consultado actualmente, sea cual sea. En una sola publicación, solo retornará el objeto de la publicación, mientras que en un archivo retornará la categoría, la etiqueta, el objeto de término o cualquier objeto relacionado con el archivo. La función retorna el identificador del objeto consultado.

Luego puedes usar esta variable $mainquery en tus argumentos WP_Query. Ahora veamos algunos ejemplos.

Ejemplo 1: Mostrar solo las publicaciones de un tipo de publicación en una página de categoría

Supongamos que tu sitio tiene agregado un tipo de publicación personalizada y que habilitaste las categorías para ese tipo de publicación personalizada. No quieres mostrar las publicaciones en el archivo de las categorías de cada categoría: en su lugar, quieres mostrar las publicaciones de tu nuevo tipo de publicación, llamémoslo product.

Tu consulta podría verse así:

Dado que el parámetro category_name que usé anteriormente toma la categoría slug como un argumento, para generar la categoría slug debes agregar ->slug después de la variable.

Esto te proporciona una consulta que recupera las publicaciones del tipo de publicación product de la base de datos con la categoría consultada actualmente. Lo debes usar en la plantilla de la página category.php.

Nota: También podrías lograr este resultado utilizando el enlace pre_get_posts para modificar la consulta principal, combinado con una función condicional para comprobar los archivos de la categoría.

Ejemplo 2: combinación de la consulta principal con WP_Query y foreach para generar varios bucles

El siguiente ejemplo generará todas las publicaciones de la página de la categoría actual, pero en lugar de mostrarlas todas en un bloque, las separará dependiendo del tipo de publicación.

Esto significa que puedes ordenar tus tipos de publicaciones en bloques o columnas en tu página usando CSS, o simplemente separarlos en diferentes listas.

Para hacer esto, usarías el siguiente código:

Esto usa la variable $mainquery que usamos antes, pero también agrega una variable $post_types para almacenar todos los tipos de publicaciones registradas en el sitio y a su vez, una variable $post_type para almacenar cada tipo de publicación individual.

Ejemplo 3: Dos consultas independientes para dos tipos de publicaciones

El ejemplo final es similar al segundo, pero en este se separan los tipos de mensajes en dos consultas independientes, cada una con un bucle propio y distinto. Esto te da más control sobre lo que se muestra para cada una, por lo que podrías mostrar las publicaciones de una forma diferente a la de los productos, tal vez incluyendo una imagen destacada para los productos o dándoles un diseño diferente.

Supongamos que tu sitio tiene registrado el tipo de publicación product, con las categorías habilitadas para él, y también está escribiendo las publicaciones del blog con las mismas categorías. En cada página del archivo de categoría quieres mostrar las diez publicaciones más recientes y, luego, quieres mostrar una lista de todos los productos de la misma categoría.

Para hacer esto, debes usar un código así:

También puedes escribir cada bucle de manera diferente para generar diferentes datos para cada tipo de publicación.

Resumen

Como puedes ver en los ejemplos anteriores, es posible usar WP_Query no solo para crear las consultas completamente personalizadas e independientes de la consulta principal, sino también para incorporar el objeto consultado actualmente y crear consultas más eficaces en las páginas de archivo.

Los ejemplos anteriores también se pueden hacer con otros tipos de archivo: para clasificaciones, autores, fechas y más. ¡A ver si se te ocurren más posibilidades!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.