Seleccionar página

Consulta wp_query para varias categorías de post WordPress

por | Ene 14, 2016 | Wordpress

Índice de contenidos

Código wp_query para mostrar post de varias categorías

Vamos a explicar como crear una consulta personalizada wp_query para varias categorías aunque es sencillo solemos cometer un par de errores en el array de category_name.

Primero nombraremos los errores habituales y luego mostraré un pequeño código para copiar y pegar en tus archivos, un código de base que tendrás que modificar con el slug de tus categorías.

Error número 1; no incluir el array para varias categorías

si hacemos lo siguiente:

'category_name' => 'wordpress,diseno-web,html5,moodle'

nuestra consulta no funcionará, aunque estamos pidiendo que nos muestre sólo los post de las categorías wordpress, diseno-web, html5 y moodle, la sintaxis no es correcta.

La sintaxis correcta de la consulta wp_query para varias categorías debe incluir el array. Dos ejemplos de código válido:

'category_name' => array('wordpress,diseno-web,html5,moodle')
$query = new WP_Query( array( 'category_name' => 'wordpress,moodle' ) );

Si tienes problemas para entender las diferencias entre los códigos anteriores, revisa la siguiente documentación:

Consultas personalizadas en WP

Consultas personalizadas con wp_query

Error número 2; diferencia entre nombre y slug de una categoría

«WordPress, diseno-web, html5 y moodle» son los slug de las categorías no los nombres, recuerda que en el array tienes que escribir los slug y NO LOS NOMBRES.

wp_query para varias categorías

Si prefieres trabajar con otros parámetros de las categorías de WordPress, por ejemplo con el ID de la categoría, puedes utilizar cat (int) , donde int representa al ID de la categoría. En el siguiente ejemplo, mostramos todos las publicaciones que pertenecen a la categoría con ID=4, ID=6… Si la categoría con ID=4, ID=6… tiene subcategorías, también se muestran.

$query = new WP_Query( array( 'cat' => '4,6,17,38') );

Hasta ahora estoy mostrando ejemplos muy sencillos que muestran todas las publicaciones que pertenecen a una de las categorías que se incluyen en el array, da lo mismo si empleamos el ID de categoría o el slug. Como las necesidades de cada uno pueden ser diferentes, os mostraré otras funciones y sus parámetros para alterar las consultas wp_query a categorías y obtener distintos resultados.

Otras funciones para mostrar varias categorías en WordPress

Mostrar todas las publicaciones que pertenezcan a varias categorías

No es una buena práctica que un post pertenezca a varias categorías. Aún así, si es tu caso, y necesitas mostrar las publicaciones que cumplen que pertenecen a dos categorías diferentes, puedes emplear el signo suma + . El siguiente ejemplo, muestra todos los post que pertenecen a la categoría francia y europa.

$query = new WP_Query( array( 'category_name' => 'francia+europa' ) );

Si prefieres hacer la consulta con IDs de la categoría:

$query = new WP_Query( array( 'category__and' => array( 4, 6 ) ) );

El resultado de la consulta anterior son todas las publicaciones que pertenecen a la categoría cuyo ID es el 4 y además pertenecen a la categoría cuyo ID es el 6.

Mostrar todas las publicaciones excepto la de algunas categorías

Cuando queremos mostrar todos los post de nuestro blog, excepto aquellas publicaciones que pertenezcan algunas categorías concretas, puede ser más interesante crear un array inverso. Es útil cuando manejamos muchas categorías y queremos mostrar la mayoría de ellas. Para lograr este objetivo podemos hacer uso del símbolo resta – delante del ID de categoría.

$query = new WP_Query( array( 'category__and' => array( -4, -17 ) ) );

La consulta anterior muestra todas las publicaciones excepto las de la categoría con ID 4 o las de la categoría con ID 17.

No mostrar hijos de ninguna categoría

Las funciones cat y category_name, muestran los post de la categoría y también todos los post que pertenecen a categorías hijas de la misma. Por ejemplo, tenemos la categoría con slug=Francia y ID=4, y de esta categoría cuelgan subcategorías, por ejemplo; París, Lyon… Si hacemos uso de category_name = Francia o cat=4, mostrará todos los post de Francia, París, Lyon… Si no quieres mostrar los hijos, debes emplear las siguientes funciones:

$query = new WP_Query( array( 'category__in' => array( 4, 17 ) ) );

Mostrará todas las categorías con ID=4 (francia) y con ID=17 (alemania) pero no sus hijos o subcategorías.

Si necesitas más información, puedes consultar: https://developer.wordpress.org/reference/classes/wp_query/

Código para copiar y pegar en tus archivos

El siguiente script, es el código completo para mostrar todas las publicaciones de WordPress que pertenecen a varias categorías. La función empleada está basada en el slug de categoría.

<?php
     
     $args = array( 
           'post_type' => 'post', 
           'category_name' => array('wordpress,web-php,prestashop,moodle'), 
           'orderby' => 'date', 
           'order' => 'DESC',
           'showposts' => 4);

     $wp_query = new WP_Query($args);
   
     if($wp_query->have_posts()) :
	while($wp_query->have_posts()) :
	$wp_query->the_post(); ?>

     <a  href='<?php the_permalink(); ?>'><?php get_the_title(); ?> </a>

     <?php   endwhile; endif; 
     wp_reset_query(); 
?>

2 Comentarios

  1. Wilson C.

    Hola Nerea,

    Utilicé el codigo de: «Código para copiar y pegar en tus archivos» en el index.php en blanco de mi wordpress, pero me sale el siguiente error: Warning: urlencode() expects parameter 1 to be string, array given in C:\xampp\htdocs\myblog\wp-includes\formatting.php on line 5424

    Por favor tu ayuda, soy nuevo en wordpress y estoy buscando como filtrar posts por categorías.

    Responder
    • Lph by Nerea Liébana

      Wilson, no es en el index.php principal, estos códigos son para modificar las plantillas del tema de WP. La ruta es wp-content/themes/tu-tema/ y hay dentro están los PHP que se modifican

      Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *