Я пытаюсь получить навигационное меню из ответа JSON с помощью плагина WP REST API v2 .
Для REST API v2 отсутствует расширение плагина навигационного меню , но только для V1.
Из кодекса WordPress Post Types я узнал, что навигационное меню рассматривается как тип записи.
Из Rest API Doc вот как мы получаем сообщения типа:
GET http://demo.wp-api.org/wp-json/wp/v2/types/<type>
Я пытался получить это так:
URL : http://localhost/wptest/wp-json/wp/v2/types/nav_menu_item
Я получил ошибку 403.
{"code":"rest_cannot_read_type","message":"Cannot view type.","data":{"status":403}}
сервер понял мой запрос, но отказался предоставить данные.
Q: Как я могу это исправить?
menus
json
plugin-json-api
wp-api
Мурхаф Сусли
источник
источник
Ответы:
Для REST API v2 имеется расширение плагина навигационного меню: https://wordpress.org/plugins/wp-api-menus/
источник
Поскольку мне самому не нравится, когда главный ответ - «Установить плагин X», я решил это так:
В настоящее время меню в WP Rest недоступны. Итак, вам нужно зарегистрировать свою собственную конечную точку, а затем просто вызвать этот маршрут из приложения, которому это нужно.
Таким образом, вы бы включили что-то вроде этого (в вашем functions.php, плагин, где угодно):
В приведенном выше примере вы получите доступ к данным из:
Вы можете использовать вышеуказанный метод для создания любых маршрутов, которые вам нравятся, чтобы получить любой тип данных, который недоступен в WP Rest. Также хорошо, если вам нужно обработать некоторые данные перед отправкой в ваше приложение.
источник
get_menu()
это обычно бывает.false
@Liren ответ работает хорошо. Однако немногие новички не могут настроить маршрут. Вот код, который хорошо работает с WordPress Rest API v2 с минимальными изменениями.
Замените название вашего меню только в функции wp_get_nav_menu_items () . Если имя меню и slug не работают (Return false), используйте идентификатор меню (отображается в Dashboard при редактировании этого меню).
URL маршрута:
Более подробная информация описана в руководстве: WordPress Rest API - Получить элементы навигационного меню.
источник
Вы должны добавить
'show_in_rest' => true,
при регистрации типа сообщения.Подробности смотрите здесь http://v2.wp-api.org/extending/custom-content-types/
источник
register_post_type('nav_menu_item', array('show_in_rest' => true));
Я не думаю, что плагин должен использоваться для такого рода задач. Кроме того, ответ hkc на самом деле не так уж и плох, ему нужно только дополнительное объяснение, чтобы заставить эту работу работать с
nav_menu_item
типом записей (тот, который используется для навигационных меню wp).Этот тип записи уже зарегистрирован, и поэтому нам нужно изменить его, это легко сделать, подключившись к
register_post_type_args
фильтру. Этот фильтр позволяет нам изменять аргументы для определенного типа записи. Код ниже показывает только это дляnav_menu_item
типа сообщения.Как вы могли заметить из приведенного выше кода, код делает немного больше, чем просто показывает тип записи в REST. Он также изменяет контроллер REST Posts по умолчанию, чтобы показать несколько похожий вывод в REST, как описано в ответе Liren . Несмотря на это, он также делает то, что делают все REST-контроллеры пост-типа и, таким образом, дает вам больше контроля и функциональности. Также рассмотрите это как более стабильные варианты, поскольку это не будет конфликтовать с другими маршрутами REST и, что не менее важно, с ним также удобнее работать.
источник
Я согласен с ответом @Lirens, но меню должно вызываться по идентификатору, а не по слагу. Также косая черта перед путем меню не нужна. Так что это становится чем-то вроде этого:
Вот так это сработало для меня.
источник