Próbuję uzyskać menu nawigacyjne z odpowiedzi JSON przy użyciu wtyczki WP REST API v2 .
Nie ma rozszerzenia wtyczki menu nawigacyjnego dla REST API v2 , ale tylko dla V1.
Z kodów pocztowych WordPress Typy postów dowiedziałem się, że menu nawigacyjne jest traktowane jako typ postu.
Z dokumentu Rest API Doc oto, w jaki sposób otrzymujemy posty typu:
GET http://demo.wp-api.org/wp-json/wp/v2/types/<type>
Próbowałem to zrobić tak:
URL : http://localhost/wptest/wp-json/wp/v2/types/nav_menu_item
Otrzymałem błąd 403.
{"code":"rest_cannot_read_type","message":"Cannot view type.","data":{"status":403}}
serwer zrozumiał moją prośbę, ale odmówił podania danych.
P: Jak mogę to naprawić?
menus
json
plugin-json-api
wp-api
Murhaf Sousli
źródło
źródło
Odpowiedzi:
Istnieje rozszerzenie wtyczki menu nawigacji dla interfejsu API REST v2: https://wordpress.org/plugins/wp-api-menus/
źródło
Ponieważ sam nie podoba mi się, gdy najważniejszą odpowiedzią jest „Zainstaluj wtyczkę X”, oto jak to rozwiązałem:
Menu nie są obecnie dostępne w WP Rest. Musisz więc zarejestrować własny punkt końcowy, a następnie po prostu wywołać tę trasę z aplikacji, która tego potrzebuje.
Więc umieściłbyś coś takiego (w twoich functions.php, wtyczce, gdziekolwiek):
W powyższym przykładzie uzyskasz dostęp do danych z:
Możesz użyć powyższej metody, aby utworzyć dowolne trasy, aby uzyskać dowolny rodzaj danych, które nie są dostępne w WP Rest. Również dobrze, jeśli musisz przetworzyć niektóre dane przed wysłaniem ich do aplikacji.
źródło
get_menu()
jest dość ogólne.false
Odpowiedź @Liren działa dobrze. Jednak niewielu początkujących może nie być w stanie dostosować trasy. Oto kod, który działa dobrze z WordPress Rest API v2 przy minimalnej modyfikacji.
Zamień nazwę swojego menu tylko w funkcji wp_get_nav_menu_items () . Jeśli nazwa menu i informacje o pracy nie działają (Zwróć fałsz), użyj identyfikatora menu (widoczny na pulpicie nawigacyjnym podczas edycji tego menu).
Trasa URL:
Więcej szczegółów w samouczku: WordPress Rest API - Uzyskaj elementy menu nawigacyjnego
źródło
Musisz dodać
'show_in_rest' => true,
podczas rejestracji typu posta.Zobacz szczegóły tutaj http://v2.wp-api.org/extending/custom-content-types/
źródło
register_post_type('nav_menu_item', array('show_in_rest' => true));
Nie sądzę, że do takich zadań powinna być używana wtyczka. Również odpowiedź hkc nie jest wcale taka zła, potrzebuje tylko dodatkowych wyjaśnień, aby działała z
nav_menu_item
typem postu (tym używanym do menu nawigacji wp).Ten typ postu jest już zarejestrowany i dlatego musimy go zmienić, łatwo to zrobić, podpinając
register_post_type_args
filtr. Ten filtr pozwala nam zmieniać argumenty dla określonego typu postu. Poniższy kod pokazuje tylko tennav_menu_item
typ postu.Jak można zauważyć z powyższego kodu, kod robi coś więcej niż tylko pokazywanie typu postu w REST. Zmienia również domyślny kontroler REST Postów, aby wyświetlać nieco podobne dane wyjściowe w REST, jak opisano w odpowiedzi Liren . Chociaż oprócz tego robi to, co robią wszystkie kontrolery REST typu post, a tym samym zapewnia większą kontrolę i funkcjonalność. Weź to również pod uwagę jako bardziej stabilną opcję, ponieważ nie kolidowałoby to z innymi trasami REST, a na koniec jest również wygodniejsze w pracy.
źródło
Zgadzam się z odpowiedzią @Lirens, ale menu powinny być wywoływane przez ID, a nie ślimak. Ponadto ukośnik przed ścieżką menu nie jest potrzebny. Staje się więc mniej więcej taki:
Tak to zadziałało dla mnie.
źródło