La mayoría de los ejemplos anteriores funcionan, pero si está utilizando varias categorías, NINGUNA (en el momento de escribir, WP versión 3.6) de los otros métodos funciona para obtener todas las categorías que se han pasado a cualquiera de ellas " cat "o" category_name ".
La única forma que he encontrado es extraer los datos de:
$wp_query->query['category_name']
Por alguna razón, esto devuelve un valor diferente a get_query_var( 'category_name' )
que solo devuelve la primera categoría.
Cuando uses múltiples categorías, deberás usar alguna función como explode
para obtener una variedad de babosas de categorías, luego recorre para obtener todos los ID:
<?php
global $wp_query;
//grab all categories from query string (if using 'category_name')
$category_slugs_array = explode("+",esc_attr($wp_query->query['category_name']));
$categories = array();
$category_ids = array();
//loop through all the slugs
foreach($category_slugs_array as $category_slug)
{
//get category object using slug
$category = get_category_by_slug( $category_slug );
//check to make sure a matching category has been found
if(isset($category->cat_ID))
{
$categories[] = $category;
$category_ids[] = $category->cat_ID;
}
}
var_dump($categories); //array of categories
var_dump($category_ids); //array of category IDs
?>
Obviamente, debe haber algunas consideraciones al usar los operadores AND (+) u OR (,).