Большинство из приведенных выше примеров работают, но если вы используете несколько категорий NONE (на момент написания, WP версии 3.6), другие методы работают, чтобы получить все категории, которые были переданы либо в «cat», либо в «category_name».
Единственный способ, который я нашел, это извлечь данные из:
$wp_query->query['category_name']
По какой-то причине это возвращает другое значение, к get_query_var( 'category_name' )
которому возвращается только первая категория.
При использовании нескольких категорий вам нужно будет использовать какую-то функцию, например, explode
чтобы получить массив слагов категорий, а затем выполнить цикл, чтобы получить все идентификаторы:
<?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
?>
Очевидно, что при использовании операторов AND (+) или OR (,) должны быть некоторые соображения.