WordPress tax_query оператор "and" не работает как ожидалось

24 авг. 2016 г., 05:20:48
Просмотры: 25.2K
Голосов: 9

У меня есть пользовательский тип записи 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". Есть ли у кого-нибудь идеи, как это можно исправить, или другое решение для достижения желаемого результата?

0
Все ответы на вопрос 2
1
15

не тестировал, но попробуй это

'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',
    ),
  ),
24 авг. 2016 г. 06:09:02
Комментарии

Спасибо за уделенное время! Для тех, кто столкнется с этой проблемой - первый вариант решения является правильным.

dkeeling dkeeling
26 авг. 2016 г. 22:01:22
0

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

18 июл. 2023 г. 09:28:04