Как исключить записи отдельной категории своей таксономии WordPress?
У меня такой вопрос как к специалистам WordPress!
смотрите я вывожу на странице данные post_type offer таксномия offer_cat и мне нужно исключить записи из категории с айдишниками 101 103 Ну а в другом случае наборот вывести записи только из этих категорий. Можете подсказать какие првки в код нужно внести?
$query = new WP_Query( array( 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => array( 'taxonomy' => 'offer_cat', ), 'category__not_in' => array(101, 103) ) ); |
$query = new WP_Query( array( 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => array( 'taxonomy' => 'offer_cat', ), 'category__not_in' => array(101, 103) ) );
Дополнительно:
Параметры Таксономий
Получаем все записи с таксономией offer_cat, исключая записи с id 100, 101 и 102:
$q = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [100, 101, 102], 'operator' => 'NOT IN', ], ], ]); |
$q = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [100, 101, 102], 'operator' => 'NOT IN', ], ], ]);
Получаем записи (3) с таксономией offer_cat и id 100, 101 и 102:
$q = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [100, 101, 102], 'operator' => 'IN', ], ], ]); |
$q = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [100, 101, 102], 'operator' => 'IN', ], ], ]);
- Спасибо!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

category__not_inработает только со стандартной таксономиейcategory. У Вас кастомная таксономияoffer_cat, поэтому исключение нужно делать черезtax_queryи операторNOT IN.Исключить записи из терминов 101 и 103:
$query = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [101, 103], 'operator' => 'NOT IN', ], ], ]);
Вывести только записи из этих терминов:
$query = new WP_Query([ 'post_type' => 'offer', 'posts_per_page' => 99, 'tax_query' => [ [ 'taxonomy' => 'offer_cat', 'field' => 'term_id', 'terms' => [101, 103], 'operator' => 'IN', ], ], ]);
Если нужно учитывать дочерние рубрики, добавьте
'include_children' => true. Если наоборот нужно исключить только сам термин без дочерних, поставьтеfalse.Проверьте ещё один момент: ID 101 и 103 должны быть именно ID терминов таксономии
offer_cat, а не ID записей. В админке WordPress это можно увидеть в URL редактирования термина:tag_ID=101.Итог: для любых кастомных таксономий используйте только
tax_query. Параметрыcategory__in,category__not_inи похожие предназначены для стандартных категорий записей и в вашем запросе не сработают как ожидается.Ещё один важный момент: если Вы добавляете несколько условий в
tax_query, указывайтеrelation. Например, если нужно исключить одну группу терминов и одновременно показать только записи из другой таксономии, без явногоrelationлегко получить неожиданный результат. После изменения запроса временно выведите$query->requestтолько на локалке, чтобы увидеть реальный SQL и убедиться, что WordPress строит условие именно так, как Вы ожидаете.