Как выполнить запрос к произвольному типу записи по термину?
Казалось бы, тривиальная задача, но у меня не получается заставить это работать. Вот мой код:
$args = array(
'numberposts' => -1, // Количество постов (-1 - все посты)
'eventcategory' => 'nice-events', // Термин таксономии
'post_type' => 'event', // Тип записи
'post_status' => 'publish' // Только опубликованные
);
var_dump(get_posts($args)); // Вывод результатов запроса
Как видно, моя таксономия называется eventcategory
, а термин - nice-events
. На самом деле терминов более 50, и независимо от того, какой термин я подставляю вместо nice-events
, я всегда получаю одинаковый результат: все записи. Термин просто игнорируется, и я не понимаю почему.
Нельзя просто придумывать свои аргументы - вместо замены параметра 'category'
на имя вашей таксономии, используйте 'tax_query'
.
Смотрите раздел "параметры таксономии" в кодексе по get_posts.
$args = array(
'post_type' => 'event',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'eventcategory',
'field' => 'slug',
'terms' => 'nice-events',
),
),
);
$your_query = get_posts( $args );
// делаем что-то с $your_query
Альтернативно, вы можете использовать класс WP_Query
:
$args = array(
'posts_per_page' => -1,
'post_type' => 'event',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'eventcategory',
'field' => 'slug',
'terms' => 'nice-events'
),
),
);
$your_query = new WP_Query( $args );
// делаем что-то с $your_query

@kaiser Действительно, можно. Я был уверен, что get_posts()
не поддерживает tax_queries. Ты прав, в codex указано, что поддерживает.

@jilseego В коде была лишняя запятая - теперь фрагмент готов для копирования и вставки...

Да, я уже исправил это до тебя. Но результата так и не получил, честно.

Первый запрос возвращает пустой массив. Второй возвращает вот это: http://pastebin.com/wnGE88Cn, что, мне кажется, не совсем правильно(?).
