Как исключить записи отдельной категории своей таксономии WordPress?

Ссылка скопирована
1 ответ

У меня такой вопрос как к специалистам 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) ) );

Дополнительно:

Как исключить записи отдельной категории своей таксономии WordPress?

Параметры Таксономий

Получаем все записи с таксономией 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', ], ], ]);

  • Спасибо!
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

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' => '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',
        ],
    ],
]);

$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 строит условие именно так, как Вы ожидаете.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно