Wie greife ich über die REST-API auf das WordPress-Menüelement zu?

Lesezeit: 3 Minuten

Benutzer-Avatar
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.

Benutzer-Avatar
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.

Dies ermöglicht uns den Zugriff auf beides:
https://ihre-wp-domain-url.com/wp-json/custom/menu und
https://ihre-wp-domain-url.com/wp-json/custom/menu/{menuID}

// 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;
}

Wie wäre es damit. Sie können über diese Route -> auf Ihr “Primär” -Menü zugreifen
https://your-wp-domain-url.com/wp-json/custom-name/menu

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ü)

register_nav_menus( array(
    'menu-1' => esc_html__( 'Primary', 'text-domain' ),
));

Füge das hinzu ‘Menü-1’ in dieser Zeile

===> $menuID = $menuLocations[‘menu-1‘];

//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',
    ) );
} );

Erster Schritt: WP-REST-API V2 Menus installieren
https://wordpress.org/plugins/wp-rest-api-v2-menus/

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

1350610cookie-checkWie greife ich über die REST-API auf das WordPress-Menüelement zu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy