Intereting Posts
Должен ли я устанавливать html-базовый url при использовании wordpress? получить все сообщения, связанные с пользовательской таксономией Добавить класс в term_description Получить функции входа в WordPress без печати Как отобразить биографию пользователя (а не автора или зарегистрированного пользователя) Условия автоматического соединения Пользовательский тип add Transitions Изменение порядка отображения пользовательских полей на панели управления WordPress для вопросов и ответов wordpress.org codebase Работа WordPress или поток выполнения, управляющие $ wpdb Является ли `query_posts` более медленным, чем вторичный запрос? Как отобразить другой пользовательский тип сообщения в другом архиве типа персонализированного типа? Как получить WP_Object, который находится внутри массива другого массива Загрузка шаблона пользовательских сообщений на основе правила перезаписи

Фильтрация результата WP_Query по категориям

Используя WP_Query, мне нужно собрать список сообщений, которые являются как категориями 1, так и категориями2. Я хочу, чтобы этот выбор включал Category1 и все его подкатегории (Category3 и Category4), если они также помечены как Category2, даже если они не помечены как Category1.

 Категории:

 Идентификатор имени Родитель
 Категория1 1
 Категория2 2
 Категория 3 3 1
 Категория4 4 1

 Сообщения:

 Категории идентификаторов
 1 1,2
 2 2,3
 3 2,4


Теперь, если бы я должен был использовать WP_Query, чтобы находить сообщения только в категории1, он, кажется, найдет все три сообщения, включая Post2 и Post3, поскольку категории 3 и Категория4 являются подкатегориями категории1, даже если сообщения не являются Категории1.

new WP_Query( array( 'cat' => 1 ) 

Однако, если я использую «category__and» для поиска сообщений, которые являются как категориями 1, так и категориями 2

 new WP_Query( array( 'category__and' => array(1, 2) ) 

он находит только Post1, который имеет как Category1, так и Category2, но он не найдет Post2, который является Category2 и Category3 или Post3, хотя Category3 и Category4 являются подкатегориями категории 1.

Есть ли способ, которым я могу взять результат этого:

 new WP_Query( array( 'cat' => 1 ) 

Который находит сообщения, которые являются категориями 1 и подкатегориями категории 1, даже если они не являются Категория1 …

И затем фильтрует его, чтобы включать только те сообщения, которые также являются Category2?

Спасибо за любые предложения.

Solutions Collecting From Web of "Фильтрация результата WP_Query по категориям"

Параметры категории WP_Query не имеют такого типа логики. category__and и category__in не возвращают сообщения в дочерних категориях заданных категорий.

Я бы предположил, что вы используете параметры WP_Query в WP_Query , у которых есть логика, которую вы ищете. Параметр relation имеет два возможных значения: AND и OR

Отношение (строка) – Логическая взаимосвязь между каждым внутренним массивом таксономии при наличии более одного. Возможные значения: «И», «ИЛИ». Не используйте с одним внутренним массивом таксономии.

Кроме того, по умолчанию дочерние термины включаются в tax_query , и это то, что вам нужно.

include_children (boolean) – включать или не включать детей для иерархических таксономий. Значение по умолчанию равно true.

Вы можете сделать что-то вроде этого:

 $args = array( 'post_type' => 'post', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => 1, ), array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => 2, 'include_children' => false, ), ), ); $query = new WP_Query( $args ); 

Что делает этот код, он ищет сообщения, которые относятся к категории 1 и в его дочерних категориях, также проверяет, относятся ли эти сообщения из категории 1 и его дочерних категорий в категорию 2. Список возвращенных сообщений будет состоять из сообщений, которые в категории 1 или любой из его дочерних категорий, а также в категории 2.

Я исключил категории детей из категории 2, но при необходимости вы можете удалить их.

Опишите, как он должен работать:

  • cat_id это не действительный аргумент, поэтому вы получаете сообщения из всех категорий. Используйте cat для установки идентификатора категории или набора идентификаторов категорий. Например:

Получить сообщения из категории 1:

 new WP_Query( array( 'cat' => 1 ) 

Получайте сообщения из категории 1 и категории 2 (не обязательно оба)

 new WP_Query( array( 'cat' => array( 1, 2 ) ) 
  • category__and находит сообщения, относящиеся ко всем указанным категориям. Например:

Получать сообщения, которые находятся в обеих категориях, 1 и 2:

 new WP_Query( array( 'category__and' => array( 1, 2 ) ) 

Подробнее в WP Query, параметры категории .