Ich versuche, das Navigationsmenü mithilfe des WP REST API v2- Plugins aus der JSON-Antwort abzurufen.
Es gibt keine Erweiterung für das Navigationsmenü-Plugin für die REST-API v2 , sondern nur für V1.
Durch den Codex WordPress Post Types habe ich erfahren, dass das Navigationsmenü als Beitragstyp behandelt wird.
In Rest API Doc erhalten wir auf diese Weise Beiträge eines Typs:
GET http://demo.wp-api.org/wp-json/wp/v2/types/<type>
Ich habe versucht, es so zu verstehen:
URL : http://localhost/wptest/wp-json/wp/v2/types/nav_menu_item
Ich habe den Fehler 403 erhalten.
{"code":"rest_cannot_read_type","message":"Cannot view type.","data":{"status":403}}
Der Server hat meine Anfrage verstanden, aber es wurde abgelehnt, die Daten weiterzugeben.
F: Wie kann ich das beheben?
quelle
Antworten:
Für die REST-API v2 gibt es eine Plugin-Erweiterung für das Navigationsmenü: https://wordpress.org/plugins/wp-api-menus/
quelle
Da es mir selbst nicht gefällt, wenn die beste Antwort "Install plugin X" lautet, habe ich es folgendermaßen gelöst:
Menüs sind derzeit in WP Rest nicht verfügbar. Sie müssen also Ihren eigenen benutzerdefinierten Endpunkt registrieren und dann nur die Route aus Ihrer Anwendung aufrufen, die sie benötigt.
Also würden Sie so etwas einbinden (in Ihrer functions.php, plugin, wo immer):
Für das obige Beispiel würden Sie auf die Daten zugreifen von:
Mit der oben beschriebenen Methode können Sie beliebige Routen erstellen, um alle Datentypen abzurufen, die in WP Rest nicht verfügbar sind. Auch gut, wenn Sie einige Daten verarbeiten müssen, bevor Sie sie an Ihre Anwendung senden.
quelle
get_menu()
ziemlich allgemein ist.false
@Liren Antwort funktioniert gut. Allerdings können nur wenige Anfänger die Route möglicherweise nicht anpassen. Hier ist der Code, der mit WordPress Rest API v2 mit minimalen Änderungen gut funktioniert .
Ersetzen Sie Ihren Menünamen nur in der Funktion wp_get_nav_menu_items () . Wenn der Menüname und der Slug nicht funktionieren (Return false), verwenden Sie die Menü-ID (im Dashboard sichtbar, während Sie dieses Menü bearbeiten).
Routen-URL:
Weitere Details finden Sie im Tutorial: WordPress Rest API - Navigationsmenüelemente abrufen
quelle
Sie müssen hinzufügen
'show_in_rest' => true,
während Sie den Beitragstyp registrieren.Details finden Sie hier http://v2.wp-api.org/extending/custom-content-types/
quelle
register_post_type('nav_menu_item', array('show_in_rest' => true));
Ich denke nicht, dass ein Plugin für diese Art von Aufgaben verwendet werden sollte. Auch die Antwort von hkc ist eigentlich nicht so schlecht, es bedarf nur einiger weiterer Erklärungen, damit dies mit dem
nav_menu_item
Beitragstyp (der für WP-Navigationsmenüs verwendet wird) funktioniert .Dieser Beitragstyp ist bereits registriert und daher müssen wir ihn ändern. Dies erfolgt einfach durch Einhängen in den
register_post_type_args
Filter. Mit diesem Filter können wir die Argumente für einen bestimmten Beitragstyp ändern. Der folgende Code zeigt genau das für dennav_menu_item
Beitragstyp.Wie Sie vielleicht anhand des obigen Codes bemerkt haben, zeigt der Code nicht nur den Beitragstyp im REST an. Außerdem wird der Standard-REST-Controller "Posts" so geändert, dass im REST eine ähnliche Ausgabe angezeigt wird, wie in der Antwort von Liren beschrieben . Daneben werden jedoch auch die Funktionen aller REST-Post-Controller ausgeführt, wodurch Sie mehr Kontrolle und Funktionalität erhalten. Betrachten Sie dies auch als stabilere Option, da sie nicht mit anderen REST-Routen in Konflikt gerät und nicht zuletzt auch komfortabler zu bearbeiten ist.
quelle
Ich stimme der Antwort von @Lirens zu, aber die Menüs sollten nach ID und nicht nach Slug aufgerufen werden. Auch der Schrägstrich vor dem Menüpfad wird nicht benötigt. So wird es ungefähr so:
So hat es bei mir funktioniert.
quelle