Wie greife ich über die REST-API auf das WordPress-Menüelement zu?
Lesezeit: 3 Minuten
unnu
Ich möchte die Hauptmenüpunkte von WordPress in einer anderen Webanwendung anzeigen. Dazu benötige ich den Inhalt von wp_nav_menu in der REST-API verfügbar gemacht.
Gibt es eine Standardmethode für den Zugriff auf die Menüstruktur über die API? Wenn nicht, gibt es aktuelle Plugins, die diese Funktionalität abdecken? Google brachte nur veraltete Lösungen hervor.
Mathias Madsen
Inspiriert durch den Vorschlag von baymax habe ich die folgenden zwei Funktionen erstellt, so dass es möglich ist, sowohl alle verfügbaren Menüs zu erhalten als auch Informationen zu den einzelnen Menüs abzurufen.
Hier sind zwei Funktionen, die verwendet werden können, um das Menü zur REST-API hinzuzufügen und einzelne Menüelemente abzurufen.
// Menu locations
add_action( 'rest_api_init', function() {
register_rest_route( 'custom', '/menu/', array(
'methods' => 'GET',
'callback' => 'wp_menu_route',
));
});
function wp_menu_route() {
$menuLocations = get_nav_menu_locations(); // Get nav locations set in theme, usually functions.php)
return $menuLocations;
}
// Individual menus
add_action( 'rest_api_init', function() {
register_rest_route( 'custom', '/menu/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'wp_menu_single',
));
});
function wp_menu_single($data) {
$menuID = $data['id']; // Get the menu from the ID
$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.
return $primaryNav;
}
Und stellen Sie sicher, dass Sie Ihr Primärmenü von register_nav_menus() verwenden. In meinem WP-Thema unter functions.php habe ich diese Zeilen. (‘Menü-1’ ist mein primäres Menü)
//https://developer.wordpress.org/reference/functions/wp_get_nav_menu_items/
function wp_menu_route() {
// register_nav_menus( array(
// 'menu-1' => esc_html__( 'Primary', 'text-domain' ),
// ) );
// using register_nav_menus primary menu name -> 'menu-1'
$menuLocations = get_nav_menu_locations(); // Get nav locations set in theme, usually functions.php)
// returns an array of menu locations ([LOCATION_NAME] = MENU_ID);
$menuID = $menuLocations['menu-1']; // Get the *primary* menu added in register_nav_menus()
$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.
return $primaryNav;
}
add_action( 'rest_api_init', function () {
//https://your-wp-domain-url.com/wp-json/custom-name/menu
register_rest_route( 'custom-name', '/menu', array(
'methods' => 'GET',
'callback' => 'wp_menu_route',
) );
} );
zweiter Schritt: Domain-Name/wp-json/menus/v1/menus Liste aller registrierten Menüs. Domänenname/wp-json/menus/v1/menus/slug data für ein bestimmtes Menü.
Ich habe das Plugin installiert, bekomme aber einen 404 mit {“code”: “rest_no_route”}.
– unnu
13. August 2018 um 8:21 Uhr
Welche URL führen Sie aus?
– aufwärts
14. August 2018 um 17:59 Uhr
Stellen Sie sicher, dass es …/wp-json/menus/v1/menus ist
– Liga
20. August 2019 um 14:57 Uhr
13506100cookie-checkWie greife ich über die REST-API auf das WordPress-Menüelement zu?yes