WordPress tax_query оператор "and" не работает как ожидалось
У меня есть пользовательский тип записи image с пользовательской таксономией image_tag (она иерархическая, как категории). Вот примеры тегов, которые могут использоваться:
Structure (id: 25)
- House (id: 56)
- Skyscraper
Nature
- Animal
- Plant (id: 41)
Я хочу отфильтровать изображения, выбирая несколько тегов совместно с оператором "and". Например, найти все фотографии с растениями и домами.
$query_args = array(
'post_type' => 'image',
'tax_query' => array(
array(
'taxonomy' => 'image_tag',
'terms' => array(41, 56), // ID для "plant" и "house"
'operator' => 'and',
),
),
);
Это работает нормально, проблема начинается, когда я пытаюсь включить родительские термины, например:
$query_args = array(
'post_type' => 'image',
'tax_query' => array(
array(
'taxonomy' => 'image_tag',
'terms' => array(25, 41), // ID для "structure" и "plant"
'operator' => 'and',
),
),
);
Тогда я не получаю результатов. Я предполагаю, что из-за использования оператора "and", WordPress не включает дочерние элементы термина "Structure". Есть ли у кого-нибудь идеи, как это можно исправить, или другое решение для достижения желаемого результата?

не тестировал, но попробуй это
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'image_tag',
'field' => 'term_id',
'terms' => 25,
'operator' => 'IN',
),
array(
'taxonomy' => 'image_tag',
'field' => 'term_id',
'terms' => 41,
'operator' => 'IN',
)
),
ИЛИ
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'image_tag',
'field' => 'term_id',
'terms' => array(25,41),
'operator' => 'IN',
),
),

Пока не могу оставлять комментарии, но в принятом ответе можно немного модифицировать второе решение, заменив на 'operator' => 'AND'
, и можно обойтись без переменной relation
. Похоже, что переменная operator
задаёт отношение между терминами внутри массива, а переменная relation
определяет отношение для групп терминов.
Источник
