WP REST API больше не поддерживает параметр filter, как получить записи в пользовательской таксономии?

3 дек. 2016 г., 11:59:49
Просмотры: 24.4K
Голосов: 8

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

https://example.com/wp-json/wp/v2/posts?filter[genre]=fiction

Это кажется очень удобным параметром. Но в версии 2 WP REST API он просто не работает. Когда я создал тикет в WP Trac, чтобы выяснить, что происходит, @swissspidy ответил, что "параметр filter был удален намеренно", но документация еще не обновлена. Это изменение обсуждается в тикете Trac 38378.

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

Например, если я создал нехиерархическую пользовательскую таксономию instance и присвоил ей значение 1 для определенных записей в пользовательском типе записи, как я могу получить все записи этого типа со значением instance=1?

Если это невозможно через REST API, есть ли способ сделать это через WordPress.com API на сайте с собственным хостингом с включенным Jetpack?

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

Попробуйте этот плагин https://github.com/bueltge/wp-rest-api-filter-items

bueltge bueltge
7 дек. 2016 г. 11:41:27

Спасибо @bueltge, но похоже, что этот плагин фильтрует поля, которые API возвращает для каждой записи?

And Finally And Finally
7 дек. 2016 г. 14:19:33

В настоящее время он помогает фильтровать записи, комментарии, таксономии. Если вам нужно больше, потребуется доработка в https://github.com/bueltge/wp-rest-api-filter-items/tree/master/inc/Items.

bueltge bueltge
7 дек. 2016 г. 15:12:28

Также в этом контексте https://github.com/WP-API/rest-filter

bueltge bueltge
7 дек. 2016 г. 20:14:08

Ах, спасибо! Именно такой фильтр я имел в виду! Если вы хотите опубликовать это в качестве ответа, я приму его. Предполагаю, что были веские причины для удаления аргумента фильтра, поэтому восстановление его может быть не лучшим решением в каждом случае, но это чрезвычайно полезный плагин, который указывает мне, как достичь желаемого.

And Finally And Finally
8 дек. 2016 г. 13:41:54
Все ответы на вопрос 2
4

Начиная с WordPress 4.7 аргумент filter для любых конечных точек записей был удален. Но если он вам нужен, вы можете добавить его с помощью плагина. В репозитории WP API есть плагин 'Rest Filter' для этой задачи — небольшой и простой.

8 дек. 2016 г. 13:48:23
Комментарии

Спасибо! Это сработало для меня. Я не был уверен, есть ли недостатки в восстановлении всего аргумента filter, поэтому вместо установки плагина я просто последовал его примеру и создал фильтр запросов для REST API для моего пользовательского типа записи, который добавляет $args['tax_query'] к аргументам. Это позволяет мне фильтровать мои пользовательские записи по пользовательской таксономии через API. Но для тех, кто хочет восстановить аргумент filter, плагин отлично подойдет.

And Finally And Finally
8 дек. 2016 г. 14:29:57

@AndFinally Не могли бы вы поделиться, как вы реализовали фильтрацию по таксономии для пользовательских типов записей? Это было бы очень полезно!

bmiskie bmiskie
10 апр. 2017 г. 20:33:36

@bmiskie Просто установите плагин, и параметр filter должен работать как раньше

Sisir Sisir
24 июл. 2017 г. 12:09:20

Я посмотрел issue на GitHub, касающееся параметра filter (https://github.com/WP-API/WP-API/issues/2799), и там указан канал в Slack, к которому у меня нет доступа, поэтому я не могу увидеть причины этого решения. Может кто-нибудь объяснить, почему он был удалён?

jagershark jagershark
2 окт. 2018 г. 19:14:11
0

В документации WordPress REST API есть раздел о регистрации пользовательских записей и таксономий для API. По сути, вам нужно добавить параметр 'show_in_rest' => true при регистрации пользовательского типа записи или таксономии.

register_taxonomy('instance', ['post'], [
    <другие аргументы...>,
    'show_in_rest' => true,
]);

После этого вы можете фильтровать любые объекты, для которых зарегистрирована эта таксономия (в примере выше это 'post'), используя имя таксономии как параметр строки запроса, например:

https://example.com/wp-json/wp/v2/posts?instance=1

Обратите внимание, что значение параметра таксономии ('1' в примере выше) должно быть id объекта таксономии, а не его имя или ярлык. Если вам известен только ярлык, а не идентификатор, вы можете сначала найти id, запросив его отдельно, поскольку регистрация пользовательской таксономии в API также создает собственную конечную точку для неё:

https://example.com/wp-json/wp/v2/instance?slug=foo-bar
28 апр. 2020 г. 02:24:14