En artículos anteriores de esta serie, has aprendido cómo está estructurado WP_Query
y cuáles son sus propiedades y métodos. El próximo paso consiste en entender los distintos argumentos que puedes usar con él y la mejor forma de hacerlo.
WP_Query
tiene un gran número de argumentos posibles, que lo hacen extremadamente flexible. Como lo puedes usar para consultar cualquier cosa contenida en tu tabla wp_posts
, tiene argumentos para cada permutación de consulta que puedas desear ejecutar sobre tu contenido.
En este tutorial veremos dos tipos de argumentos para lo siguiente:
- Categorías
- Etiquetas
Los argumentos para estas dos taxonomías son similares pero presentan algunas diferencias que debes conocer si quieres usarlas de forma eficaz.
Un repaso a cómo funcionan los argumentos en WP_Query
Antes de empezar, recordemos cómo funcionan los argumentos en WP_Query
. Cuando introduces WP_Query
en tus temas o plugins, debes incluir cuatro elementos principales:
- Los argumentos para la consulta, usando los parámetros que veremos en este tutorial.
- La consulta en sí.
- El loop.
- Y para terminar: el restablecimiento de los datos del post.
En la práctica esto tendrá un aspecto parecido a esto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $args = array( // Argumentos para tu consulta. ); // Consulta personalizada. $query = new WP_Query( $args ); // Comprueba si existen resultados para la consulta. if ( $query->have_posts() ) { // Inicia el loop sobre los resultados de la consulta. while ( $query->have_posts() ) { $query->the_post(); // El contenido de las entradas consultadas van aquí. } } // Restore original post data. wp_reset_postdata(); ?> |
Los argumentos son lo que le indicará a WordPress qué datos extraer de la base de datos, que es lo que vamos a ver ahora. Aquí nos vamos a centrar en la primera parte del código:
1 2 3 |
$args = array( // Argumentos para tu consulta. );Como puedes ver, los argumentos están contenidos dentro de una cadena. Aprenderás cómo codificarlos a través de este tutorial. |
Creando el código para tus argumentos
Existe una forma concreta de crear el código para los argumentos de la cadena, es la siguiente:
1 2 3 4 5 |
$args = array( 'parameter1' => 'value', 'parameter2' => 'value', 'parameter3' => 'value' ); |
Debes colocar los parámetros y sus valores entre paréntesis, usa =>
entre ellos, y sepáralos mediante comas. Si cometes aquí un fallo, WordPress podría no añadir todos tus argumentos en la consulta o podrías acabar con la conocida pantalla en blanco.
Parámetros de categoría
Empecemos con los parámetros de categoría. Las opciones en este caso son las siguientes:
cat
(int): usa el id de la categoría.category_name
(string): usa el slug de la categoría (NO su nombre).categori__and
(array): usa el id de la categoría.category__in
(array): usa el id de la categoría.category__not_in
(array): usa el id de la categoría.
Advierte que en ninguno de ellos usamos el nombre de la categoría. Hasta el parámetro category_name
toma el slug de la misma como valor. Yo suelo usarlo en lugar del ID ya que cuando vuelvo al código pasado un tiempo, los slugs son más fáciles de identificar que los IDs. Sin embargo, si piensas que quizá los usuarios de tu sitio vayan a cambiar el slug de una o varias categorías, te recomiendo que uses el ID para evitar cualquier problema en el futuro.
Echemos un vistazo a cómo usar cada uno de estos.
El parámetro cat
El parámetro cat
es bastante sencillo: usa el ID de una categoría o una cadena de IDs de varias categorías.
La consulta de una categoría tendría el siguiente aspecto:
1 2 3 |
$args = array( 'cat' => '12' ); |
La consulta de varias categorías tendría este aspecto:
1 2 3 |
$args = array( 'cat' => '12, 13, 14' ); |
Lo anterior le indicará a WordPress que debe consultar los post existentes en cualquiera de las categorías listadas. Si quieres encontrar post pertenecientes a una cadena de categorías, usa el parámetro category_and
, veremos esto más adelante.
También puedes usar el parámetro cat para encontrar posts que pertenezcan a una categoría pero no a otra, usando el signo de restar justo antes del ID de la categoría, como en el siguiente ejemplo:
1 2 3 |
$args = array( 'cat' => '12, -13' ); |
Lo anterior consultará los posts de la categoría 12
, pero solo aquellos que no pertenezcan a su vez a la categoría 13
.
El parámetro category_name
El parámetro category_name
usa el slug de la categoría, no su nombre (confuso, ¡lo sé!). De nuevo puedes usarlo para una sola categoría o con una cadena de categorías para encontrar entradas que estén en cualquiera de ellas.
Para consultar las entradas pertenecientes a una única categoría añades lo siguiente:
1 2 3 |
$args = array( 'category_name' => 'slug-de-mi-categoria' ); |
Y para encontrar las entradas pertenecientes a una o más categorías, usa esto:
1 2 3 |
$args = array( 'category_name' => 'slug-de-categoria-1, slug-de-categoria-2, slug-de-categoria-3' ); |
Al igual que ocurre con el parámetro cat, esto no encontrará los posts existentes en todas las categorías, sino los posts de cualquiera de las categorías.
El parámetro category_and
Si quieres encontrar posts presentes en todas las categorías de una cadena, este es el parámetro que debes usar. Se necesitan los IDs de cada categoría como valor. Por tanto, para encontrar las entradas pertenecientes a todas las tres categorías, usarías lo siguiente:
1 2 3 4 5 6 7 |
$args = array( 'category__and' => array( '12', '13', '14' ) ); |
Observa que esto hace uso de un array, no de una cadena, por eso el código es distinto. El parámetro tiene dos guiones bajos en su nombre: si usas solo uno no funcionará.
El parámetro category_in
El siguiente parámetro busca los posts pertenecientes a una o más de una de las categorías de un array. Realmente funciona de la misma manera que el parámetro cat, y además toma el ID de la categoría como su valor.
Por tanto, para consultar posts pertenecientes a una o más categorías de un array, usarías lo siguiente:
1 2 3 4 5 6 7 |
$args = array( 'category__in' => array( '12', '13', '14' ) ); |
El ejemplo de arriba devolverá los posts pertenecientes a una o más de una de esas categorías.
Lo que te queda por leer:
-
-
El parámetro category_not_in
-
-
Parámetros de etiqueta
-
El parámetro tag
-
El parámetro tag_id
-
El parámetro tag_in
-
El parámetro tag__not_in
-
Los parámetros tag_slug__and y tag_slug__in
-
Deja una respuesta