Как фильтровать по категории в REST API, исключая посты также из других терминов категорий?

2 сент. 2016 г., 02:29:37
Просмотры: 15.3K
Голосов: 4

Я использую 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 не поддерживает два разных аргумента категорий в одном запросе? Когда я фильтрую по категориям и меткам, конфликта не возникает.

1
Комментарии

Вы нашли решение, которым могли бы поделиться?

The Unknown Dev The Unknown Dev
19 окт. 2016 г. 16:27:19
Все ответы на вопрос 1
0

Согласно 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.

31 мар. 2017 г. 23:43:02