Как получить доступ к пункту меню WordPress через REST API?

Я хочу отобразить пункты главного меню из Wordpress в другом веб-приложении. Поэтому мне нужно содержимое wp_nav_menu, представленное в REST API.

Есть ли стандартный способ доступа к структуре меню через API? Если нет, есть ли обновленные плагины, которые охватывают эту функцию? Google поднял только устаревшие решения.


person unnu    schedule 09.08.2018    source источник


Ответы (3)


Как насчет этого. Вы можете получить доступ к своему «Основному» меню, используя этот маршрут -> https://your-wp-domain-url.com/wp-json/custom-name/menu

И обязательно используйте главное меню из register_nav_menus (). В моей теме WP на functions.php у меня есть эти строки. ('menu-1' - мое основное меню)

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

Добавьте в эту строку 'menu-1'

===> $ 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',
    ) );
} );
person baymax    schedule 24.08.2018

Вдохновленный предложением baymax, я создал следующие две функции, поэтому можно получить как все доступные меню, так и информацию об отдельных меню.

Вот две функции, которые можно использовать для добавления меню в REST API и получения отдельных пунктов меню.

Это позволяет нам получить доступ к обоим:
https://your-wp-domain-url.com/wp-json/custom/menu и
https://your-wp-domain-url.com/wp-json/custom/menu/%7BmenuID%7D

function wp_menu_route() {
    $menuLocations = get_nav_menu_locations(); // Get nav locations set in theme, usually functions.php)
    return $menuLocations;
    }

    add_action( 'rest_api_init', function () {
        register_rest_route( 'custom', '/menu/', array(
        'methods' => 'GET',
        'callback' => 'wp_menu_route',
    ) );
} );

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

    add_action( 'rest_api_init', function () {
        register_rest_route( 'custom', '/menu/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'wp_menu_single',
    ) );
} );
person mathiasmadsen    schedule 11.02.2021

первый шаг: установите WP-REST-API V2 Menus https://wordpress.org/plugins/wp-rest-api-v2-menus/

второй шаг: имя домена / wp-json / menus / v1 / menus список каждого зарегистрированного меню. Имя домена / wp-json / menus / v1 / menus / slug data для определенного меню.

person upendra    schedule 09.08.2018
comment
Я установил плагин, но получаю 404 с {code: rest_no_route}. - person unnu; 13.08.2018
comment
Какой URL вы используете? - person upendra; 14.08.2018
comment
Убедитесь, что это ... / wp-json / menus / v1 / menus - person Liga; 20.08.2019