Как фильтровать по категории в REST API, исключая посты также из других терминов категорий?
Я использую REST API для загрузки нескольких постов с другого сайта, каждый пост должен принадлежать к разной категории. Однако у меня есть категория "Избранные события", которая включает посты, также показанные в других категориях, поэтому у меня есть пост, повторяющийся в двух разных категориях.
Мой запрос для избранной категории выглядит так:
http://localhost/wp-json/wp/v2/events/?categories=23&per_page=1
И я хочу исключить посты из этой категории (уже показанные как избранные), чтобы они не появлялись в других разделах. Я уже пробовал такие запросы:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in]=23
// но, согласно документации, category__not_in ожидает массив вместо скалярного значения:
// https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
// Я попробовал это, передавая ID исключаемой категории как первый элемент массива:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in][]=23
Я уже читал другие ответы, не связанные с параметрами REST API, но с аргументами, передаваемыми напрямую в WP_Query с той же проблемой: включить посты из одной категории, но исключить те, которые также принадлежат к другому термину. Оба подхода, кажется, работают сначала запрашивая все посты, принадлежащие исключаемой категории, а затем передавая этот массив ID в параметр exclude, HTTP-запрос будет выглядеть примерно так:
http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&exclude[]=1&exclude[]=2&exclude[]=3
Однако это ресурсоемко, так как требует двух запросов к базе данных даже на одном бэкенде, но это еще хуже, поскольку потребуется два цикла запросов от HTML-страницы к бэкенду.
Есть ли лучший способ сделать это? Разве WP_Query не поддерживает два разных аргумента категорий в одном запросе? Когда я фильтрую по категориям и меткам, конфликта не возникает.
Согласно http://v2.wp-api.org/reference/posts/, в API доступен параметр categories_exclude.
Это должно работать:
http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1
...чтобы получить записи из категории 23, исключив те, у которых также назначена категория 42.
