WP REST API: фильтрация по категории 1 И категории 2
Я работаю с REST API и столкнулся с проблемой: Как можно отфильтровать записи, которые находятся одновременно в cat1 и cat2?
На данный момент, ?categories[]=45&categories[]=50
возвращает записи из категории с ID 45 ИЛИ 50 - как получить записи, которые находятся одновременно в категориях 45 И 50?
Заранее спасибо.
@Jesse см.: WP-API/WP-API#2990
Начиная с WP 4.7, параметр filter
был удален из WP-API.
Вам необходимо использовать этот плагин: https://github.com/WP-API/rest-filter

Альтернативный плагин https://github.com/bueltge/wp-rest-api-filter-items, который включает тесты для надежной поддержки.

@bueltge, Интересно. В настоящее время я использую плагин rest-api-filter-fields: https://github.com/svrooij/rest-api-filter-fields, который, похоже, делает то же самое.

Похоже, в текущей версии API нет способа сделать это напрямую. Без использования плагина это можно реализовать с помощью кастомной конечной точки или используя функцию фильтра REST-запроса для конкретного типа записи.
Вот пример функции фильтра, которая добавляет параметр cat_relation
:
add_filter( 'rest_post_query', function( $args, $request ) {
if($request['cat_relation'] == 'AND') {
$args['category__and'] = $request['categories'];
}
return $args;
}, 10, 2);
Пример URL запроса будет выглядеть так:
http://example.com/wp-json/wp/v2/posts?categories=17,8&cat_relation=AND

Установите плагин фильтрации, о котором говорил Остин (https://github.com/WP-API/rest-filter), и попробуйте ?filter[categories]=cat_one_slug%2Bcat_two_slug
.
Я выяснил, что %2B
является кодом, эквивалентным символу +
.
Обычно мы используем +
для оператора AND, но, к сожалению, он преобразуется в пробел, поэтому вместо него используйте %2B
.

Фильтрация записей по нескольким пользовательским таксономиям на основе логических условий "И", "ИЛИ".
Вот что вам нужно сделать в новых версиях WordPress (v5 и выше)
Предположим, у вас есть две пользовательские таксономии: sector (сектор) и offerings (предложения).
Получение всех записей, помеченных термином таксономии с ID 51 "ИЛИ" 52, принадлежащих таксономии "sector" "ИЛИ" Получение всех записей, помеченных термином таксономии с ID 57 "И" 58, принадлежащих таксономии "offering"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=OR
Получение всех записей, помеченных термином таксономии с ID 51 "ИЛИ" 52, принадлежащих таксономии "sector" "И" Получение всех записей, помеченных термином таксономии с ID 57 "И" 58, принадлежащих таксономии "offering"
https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&offering=57,58&tax_relation=AND

Хорошо, это означает, что при получении постов будет отображаться номер категории для каждого поста.
Затем вы можете просто отфильтровать по номеру категории следующим образом:
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts`);
const jsonresp = await wpdata.json()
const particularcategoryposts = jsonresp.filter(function(item){
return item.categories == "4";
});
P.S.
По умолчанию WP API возвращает только 10 постов. Убедитесь, что вы уточнили необходимость получения более 10 постов, если это требуется. Максимальное количество — 100 постов.
const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts/?per_page=100`);
