Advertisement
  1. Code
  2. WordPress

Argumentos WP_Query: Posts, Pages, y Post Types

Scroll to top
Read Time: 8 min
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Properties and Methods
WP_Query Arguments: Categories and Tags

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

En esta parte de la serie acerca de WP_Query, aprenderas a como utilisar WP_Query para buscar entradas, paginas, y entradas de typo personalizado. Puedes buscar entradas y páginas específicas o puedes procesar una consulta que te devuelva entradas de uno o más tipos de entrada (los llamaré desde ahora post types).

Recordemos Cómo Funcionan los Argumentos en WP_Query

Antes de empezar, un breve repaso sobre cómo trabajan los argumentos en WP_Query. Cuando usas el código WP_Query en tus temas o plugins, necesitas incluir cuatro elementos principales:

  • los argumentos de la consulta, usando parámetros que veremos en este tutorial
  • la consulta en sí
  • el loop
  • y para concluir: cerrar con las etiquetas if y while, así como reajustar los datos del post.

En la práctica, esto será algo parecido a lo siguiente:

Los argumentos son lo que le indica a WordPress que información rescatar de la base de datos y eso es lo que vamos a ver aquí. De manera que todo en lo que nos vamos a concentrar es la primera parte del código:

Como puedes ver, los argumentos están contenidos en una cadena. Aprenderás a crearlos a través de este tutorial:

Crear el Código de Tus Argumentos

Hay un modo específico de codificar los argumentos en la cadena, consiste en lo siguiente:

Debes cerrar los parámetros y sus valores en con comillas simples, usar => entre ellos y separar los pares argumento-valor mediante comas. Si te equivocas, WordPress no aplicará todos tus argumentos a la consulta u obtendrás la pantalla blanca.

Consultar Posts o Páginas Únicas

Comencemos con el escenario más simple: procesar una consulta para encontrar una página o entrada concreta.

Solicitar Una Entrada

Para encontrar una entrada específica (o grupos de entradas), tienes dos opciones:

  • p (int): Usar el ID de la entrada.
  • name (string): Usar el slug de la entrada.

Puedes usar estos parámetros con cualquier tipo de posts, incluidas las entradas, las páginas, los adjuntos y las entradas personalizadas. Por defecto, WordPress consultará por el tipo de post 'post' (entrada) y no te devolverá páginas o entradas personalizadas—si quieres hacerlo, tendrás que añadir más argumentos o usar un argumento diferente, lo cual veremos más adelante en el tutorial.

Así que, para conseguir una entrada específica usarás alguno de estos:

o:

Advierte que el parámetro name coge el slug de la entrada como argumento, no su título.

El uso del parámetro name hace que sea más fácil identificar lo que tu consulta obtendrá de la base de datos cuando revisites tu código tiempo más tarde, pero existe el riesgo de que no funcione si uno de los usuarios de tu sitio cambia el slug de la entrada. El ID de la entrada no puede modificarse, por ello es más seguro.

Solicitar Una Página

Para solicitar una página en concreto tienes de nuevo dos opciones:

  • page_id (int): Usar el ID de la página.
  • pagename (string): Usar el slug de la página.

Con lo cual, para ejecutar una consulta sobre una sola página de la base de datos, usarías uno de estos:

o:

Consultar por Una Entrada de Otro Tipo

Para procesar una petición de otro tipo de post, incluyendo una tipos de entrada personalizada, podrías usar también el parámetro post_type.  Te lo mostraré un poco más tarde en detalle, pero brevemente, para solicitar una sola entrada el el tipo de entrada personalizada product, usarías esto:  

O para solicitar un archivo adjunto, usarías esto:

Consultar por Páginas Hijas

En ocasiones podrías necesitar obtener todas las páginas hijas de una página determinada, por ejemplo si tu web tiene una estructura jerárquica y quieres mostrar en cada página un listado de todas sus sub-páginas o páginas hijas.

Advertencia: No deberías hacer esto con las entradas, ya que estas no son jerárquicas, aunque sí lo puedes hacer con un tipo de entrada personalizada si es de naturaleza jerárquica.

Dispones de tres argumentos para conseguirlo:

  • post_parent (int): Usar el ID de página para devolver solo las páginas hijas. Establecer en 0 para que te devuelva solo las entradas de primer nivel.
  • post_parent__in (array): Usar una cadena de IDs de entradas.
  • post_parent__not_in (array): Usar una cadena de IDs de las entradas.

Veamos cada uno de ellos.

El primero, post_parent, te permite consultar las páginas que son hijas de otra página específica.

Así que para encontrar todas las páginas hijas de otra, usarías esto:

Toma nota de que tienes que incluir el argumento post_type ya que por defecto el tipo de entrada que WP_Query busca es post.  

Llevando esto más allá, así es como lo usarías para encontrar los hijos de la página actual:

Puedes incluso usar este parámetro para identificar las páginas de primer nivel, p. ej. aquellas sin padre:

¿Pero que sucede si lo que quieres es identificar las hijas de multiples páginas? Lo puedes lograr también, con el parámetro post_parent__in. Esto necesita una cadena de IDs de las entradas. 

Así que para consultar por las hijas de dos de tus páginas, usarías esto:

Incluso puedes excluir paginas hijas de la consulta, usando el parámetro post_parent__not_in.

Solicitar Multiples Entradas

Es común también ejecutar una consulta que incluya o excluya multiples entradas. Dispones de dos argumentos para hacer esto:

  • post__in (array): Usar los IDs de las entradas.
  • post__not_in (array): Usar los IDs de las entradas.

El argumento post__in se puede usar con cualquier tipo de entrada (post type) y requiere una cadena de IDs. De forma que para mostrar una lista de entradas específicas, usarías lo siguiente:

Advertencia: Si usas este argumento para obtener las entradas, WordPress rescatará también las entradas destacadas o "sticky posts", incluso aunque no estén en tu lista. Para omitirlas, incluye el argumento ignore_sticky_posts:

El argumento ignore_sticky_posts funciona de forma similar, tomando la cadena de IDs de las entradas, pero muestra todas a excepción de las enumeradas. Habitualmente lo combinarás con otros argumentos para evitar mostrar un listado excesivamente largo.

Por ejemplo, para solicitar todas las entradas del post type product pero excluyendo unas cuantas:

Para combinar esto último con uno de nuestros ejemplos anteriores, aquí tienes como consultar todas las páginas de nivel superior exceptuando la actual:

Advierte que si también has registrado un tipo de entrada jerárquica, necesitarás incluir el parámetro post__type en este código para obtener páginas exclusivamente.

Solicitar Tipos de Entradas Concretas

En alguno de los anteriores ejemplos he usado el parámetro post_type para identificar cierto tipo de entradas. Veamos los argumentos que puedes usar con él:

  • post: Una entrada.
  • page: Una página.
  • revision: Una revisión.
  • attachment: Un archivo adjunto.
  • nav_menu_item: Un elemento del menú de navegación.
  • any: Devuelve cualquier tipo de entrada excepto revisiones y tipos de entradas con 'exclude_from_search' establecido como true en el momento en que fueron registradas.
  • Tipos de Entradas Personalizadas (p. ej. product).

Tal y como hemos visto antes, puedes usar este parámetro junto a argumentos para crear una consulta más específica.

Por ejemplo, aquí tienes como solicitar todas las páginas de tu sitio web.

Tipos de Entradas Personalizadas

Solicitar un tipo de entrada personalizada es sencillo: usa el nombre que le diste cuando la registraste, no el título usado en los elementos del menú de administración. Digamos que registraste el tipo de entrada para tus productos mediante register_post_type() como sigue:

El valor que debes usar para el argumento post_type cuando consultes por productos, no es 'Product' o 'Products', sino 'product':

Adjuntos

Por defecto si intentas realizar una consulta solicitando un adjunto, no funcionará debido a que WordPress establece de forma predeterminada el post_status de un adjunto  como inherit y WP_Query como 'post_status' => 'publish' a menos que tú especifiques otros valores. Así que si quieres solicitar adjuntos, debes incluir el argumento post_status:

Ten en cuenta que también podrías usar any en lugar de inherit.

Sumario

Utilizar WP_Query para crear consultas personalizadas de entradas o tipos de entradas es algo que realizo constantemente. Tal y como has visto en estos los ejemplos, existen un innumerables posibilidades:

  • Úsalo para consultar por las páginas de nivel superior de tu web.
  • Úsalo para consultar por las entradas de un tipo de post específico.
  • Úsalo para consultar por todas las entradas excepto aquellas que indiques.
  • Úsalo para consultar por todas las páginas descendientes de la actual.

Hay muchas posibilidades imaginables usando los argumentos que hemos visto, este tutorial pretende darte una idea.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
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.