У меня есть две пользовательские таксономии:
Type
может быть следующим:
- Блог
- Тематическое исследование
- Вебинар
Subject
может быть:
- В помещении
- На улице
У меня есть два выпадающих меню в бэкэнде WordPress, где пользователь может выбрать, что type
и subject
они хотят показать из resources
(мой пользовательский тип записи).
Скажем, к примеру, следующие записи существуют в resources
:
- Публикация 1 : Теги
type
blog и subject
outdoor. - Пост 2 : Тег с
type
блогом и subject
крытый. - Пост 3 : С тегом
subject
крытый.
Пользователь может фильтровать по type
или subject
. Под этим я подразумеваю, что не оба требуются, только один может быть выбран. Но, если пользователь выбирает и type
, и subject
, я хочу, чтобы он отображал сообщения с обоими тегами.
Текущий подход:
$args = array(
'post_type' => 'resources',
'post_status' => 'publish',
'posts_per_page' => 8,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
),
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
)
);
$resource_type
: переменная, содержащая раскрывающееся значение для type
. $resource_subject
: переменная, содержащая раскрывающееся значение для subject
.
Текущие результаты:
При фильтрации только по subject
- работает.
При фильтрации по type
- работает.
При фильтрациис обоими - это не работает. Т.е. я отфильтровал по type
блогу и subject
в помещении, и он показывает мне subject
сообщений на открытом воздухе.
В качестве альтернативы, следующее работает при запросе обоих, но неработать только при выборе одного:
$args = array(
'post_type' => 'resources',
'post_status' => 'publish',
'posts_per_page' => $card_count,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'type',
'field' => 'slug',
'terms' => $resource_type,
),
array(
'taxonomy' => 'subject',
'field' => 'slug',
'terms' => $resource_subject,
),
)
);