WP REST API больше не поддерживает параметр filter, как получить записи в пользовательской таксономии?
По всему интернету я вижу советы людей, которые говорят, что когда вы хотите получить записи в пользовательской таксономии, вы должны использовать параметр 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?

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

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

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

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

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

В документации 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
