Как выполнить запрос к произвольному типу записи по термину?

3 мая 2012 г., 16:11:41
Просмотры: 15.3K
Голосов: 2

Казалось бы, тривиальная задача, но у меня не получается заставить это работать. Вот мой код:

        $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, я всегда получаю одинаковый результат: все записи. Термин просто игнорируется, и я не понимаю почему.

0
Все ответы на вопрос 1
6
10

Нельзя просто придумывать свои аргументы - вместо замены параметра '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
3 мая 2012 г. 16:36:41
Комментарии

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

Johannes Pille Johannes Pille
3 мая 2012 г. 17:24:24

Я не получаю никаких результатов, используя твой код...

jilseego jilseego
3 мая 2012 г. 17:36:21

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

Johannes Pille Johannes Pille
3 мая 2012 г. 17:40:24

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

jilseego jilseego
3 мая 2012 г. 17:42:51

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

jilseego jilseego
3 мая 2012 г. 17:56:24

Так что использование WP_Query() всё равно возвращает пустой результат, потому что $your_query->have_posts() возвращает булево значение false.

jilseego jilseego
3 мая 2012 г. 18:05:29
Показать остальные 1 комментариев