Запросы двух таксономий с tax_query не просыпаются - PullRequest
0 голосов
/ 22 октября 2019

У меня есть две пользовательские таксономии:

  • Тип
  • Продукт

Type может быть следующим:

  1. Блог
  2. Тематическое исследование
  3. Вебинар

Subject может быть:

  1. В помещении
  2. На улице

У меня есть два выпадающих меню в бэкэнде 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,
      ),
    )

  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...