Запрос записей по ID произвольной таксономии
У меня есть произвольный тип записи portfolio
и произвольная таксономия build-type
(действует как категории)
Я пытаюсь запросить записи portfolio
по ID build-type
, например, все записи Портфолио в разделе "Отели" (id=4 для этой таксономии)
// получаем ID из произвольного поля для отображения записей на определенной странице
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// выполняем запрос
query_posts(array(
'post_type' => 'portfolio',
'showposts' => -1,
'tax_query' => array(
'taxonomy' => 'build-type',
'terms' => $buildType,
'field' => 'term_id'
),
'orderby' => 'title',
'order' => 'ASC'
));
В настоящее время он выводит все записи portfolio
, а не только те, которые имеют указанный ID build-type
Для параметра 'field' => 'term_id'
следует использовать term_id
, tag_ID
, id
или что-то другое?
Кто-нибудь знает, как это исправить?
Заранее спасибо!

Причина, по которой это не работает, заключается в том, что 'tax_query' должен быть массивом массивов (знаю, звучит запутанно).
...
'tax_query' => array(
array(
'taxonomy' => 'build-type',
...
Это сделано таким образом, чтобы можно было объединить несколько различных правил вместе.

Отличная работа, Drew. Это решило проблему. Выложил финальный скрипт на Github https://gist.github.com/1275191

Дрю был прав, tax-query
должен быть массивом массивов.
Окончательное решение:
// получаем ID из произвольного поля для отображения записей на конкретной странице
$buildType = get_post_meta($post->ID, 'build_type_id', true);
// выполняем запрос
query_posts(array(
'post_type' => 'portfolio',
'showposts' => -1,
'tax_query' => array(
array(
'taxonomy' => 'build-type',
'terms' => $buildType,
'field' => 'term_id',
)
),
'orderby' => 'title',
'order' => 'ASC' )
);
На GitHub здесь:
https://gist.github.com/1275191
Спасибо!

Отклонение моего ответа и принятие своего собственного действительно ранит, чувак... прямо в сердце. Если кто-то будет искать меня, я буду в лаунж-зоне.

Ха, прости, дружище. Я новичок во всём этом и не знал, что можно принять только один ответ. Я исправлю отметку, чтобы ты мог вернуться из лаунж-зоны.

Вам необходимо создать массив внутри tax_query, где также можно выбирать операторы. Например, вывод print_r для tax_query должен выглядеть следующим образом.
Array
(
[relation] => AND
[0] => Array
(
[taxonomy] => build-type
[terms] => Array
(
[0] => term1
[1] => term2blabla
)
[field] => slug
[operator] => IN
)
[1] => Array
(
[taxonomy] => another-taxonomie
[terms] => Array
(
[0] => term1
[1] => term2
)
[field] => slug
[operator] => IN
)
)
Конечно, вы можете изменить field на id, но я всегда использую slug для простоты. Как видите, вы можете запрашивать несколько таксономий таким образом.
