WP REST API: фильтрация по категории 1 И категории 2

6 янв. 2017 г., 11:39:49
Просмотры: 48.3K
Голосов: 23

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

На данный момент, ?categories[]=45&categories[]=50 возвращает записи из категории с ID 45 ИЛИ 50 - как получить записи, которые находятся одновременно в категориях 45 И 50?

Заранее спасибо.

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

Вы нашли решение для этой проблемы?

Corey Corey
3 февр. 2017 г. 19:03:39

@Corey: Нет. Похоже, это пока невозможно (видел другие посты поддержки плагинов с такими же утверждениями). Я использовал API для приложения на Ionic, загружал их отдельно и пересекал. Оставляю вопрос открытым на случай, если мое понимание неполное. Где-то читал, что можно редактировать плагин (крайне не рекомендуется) для достижения этого.

Jesse P Francis Jesse P Francis
5 февр. 2017 г. 17:17:40
Все ответы на вопрос 8
1
15

Несколько категорий можно указать через запятую, как показано ниже

http://example.com/wp-json/wp/v2/posts?categories=20,30

надеюсь, это поможет

11 мая 2017 г. 12:25:23
Комментарии

Запрос предназначен для поиска по И, а здесь вы получите ИЛИ.

Tom Woodward Tom Woodward
9 сент. 2019 г. 02:29:32
2

@Jesse см.: WP-API/WP-API#2990

Начиная с WP 4.7, параметр filter был удален из WP-API.

Вам необходимо использовать этот плагин: https://github.com/WP-API/rest-filter

28 дек. 2017 г. 21:05:27
Комментарии

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

bueltge bueltge
11 июн. 2019 г. 09:57:46

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

Austin Passy Austin Passy
12 июн. 2019 г. 19:21:24
0

Похоже, в текущей версии 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

29 апр. 2020 г. 18:15:36
0

Установите плагин фильтрации, о котором говорил Остин (https://github.com/WP-API/rest-filter), и попробуйте ?filter[categories]=cat_one_slug%2Bcat_two_slug.

Я выяснил, что %2B является кодом, эквивалентным символу +.

Обычно мы используем + для оператора AND, но, к сожалению, он преобразуется в пробел, поэтому вместо него используйте %2B.

22 мар. 2018 г. 02:38:18
0

Фильтрация записей по нескольким пользовательским таксономиям на основе логических условий "И", "ИЛИ".

Вот что вам нужно сделать в новых версиях 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
6 июл. 2020 г. 11:42:28
1
-2

Вы можете получить доступ к нескольким категориям, используя следующий запрос:

http://YOURSITE.DEV/wp-json/wp/v2/posts?categories=45+50

Надеюсь, это поможет!

С уважением

14 янв. 2017 г. 15:00:21
Комментарии

Не работает! :)

Jesse P Francis Jesse P Francis
5 февр. 2017 г. 17:13:11
0
-2

Вот что я сделал, это работает отлично.

http://example.com/wp-json/wp/v2/articles/?_embed&categories=1,2,3,4&per_page=30
11 июн. 2019 г. 08:24:01
0
-2

Хорошо, это означает, что при получении постов будет отображаться номер категории для каждого поста.

Затем вы можете просто отфильтровать по номеру категории следующим образом:

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`);
26 мая 2021 г. 22:27:19