如何通过RESTAPI访问wordpress菜单项?

如何通过RESTAPI访问wordpress菜单项?,wordpress,wordpress-rest-api,Wordpress,Wordpress Rest Api,我想在另一个web应用程序中显示Wordpress的主菜单项。因此,我需要RESTAPI中公开的wp_nav_menu的内容 是否有通过API访问菜单结构的标准方法?如果没有,是否有涵盖此功能的最新插件?谷歌只提出了过时的解决方案。第一步:安装WP-REST-APIv2菜单 第二步: 域名/wp json/menus/v1/每个注册菜单的菜单列表。 特定菜单的域名/wp-json/menus/v1/menus/slug数据。如何。您可以使用此路径访问“主”菜单-> 并确保使用注册导航菜单()

我想在另一个web应用程序中显示Wordpress的主菜单项。因此,我需要RESTAPI中公开的
wp_nav_menu
的内容


是否有通过API访问菜单结构的标准方法?如果没有,是否有涵盖此功能的最新插件?谷歌只提出了过时的解决方案。

第一步:安装WP-REST-APIv2菜单

第二步: 域名/wp json/menus/v1/每个注册菜单的菜单列表。
特定菜单的域名/wp-json/menus/v1/menus/slug数据。

如何。您可以使用此路径访问“主”菜单->

并确保使用注册导航菜单()中的主菜单。 在functions.php的WP主题中,我有这些行。('menu-1'是我的主菜单)

在此行中添加此“菜单-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',
    ) );
} );

受baymax建议的启发,我创建了以下两个函数,因此既可以获取所有可用菜单,也可以检索有关单个菜单的信息

这里有两个函数可用于将菜单添加到RESTAPI和检索单个菜单项

这使我们能够同时访问两个:

功能wp_菜单_路线(){
$menuLocations=get_nav_menu_locations();//在主题中设置导航位置,通常是functions.php)
返回$MENULOTIONS;
}
添加操作('rest\u api\u init',函数(){
注册\u rest\u路由('custom','/menu/',数组(
'方法'=>'获取',
“回调”=>“wp\U菜单\U路由”,
) );
} );
功能wp\u菜单单($data){
$menuID=$data['id'];//从id获取菜单
$primaryNav=wp_get_nav_menu_items($menuID);//获取wp对象数组,即查询位置的导航项。
返回$primaryNav;
}
添加操作('rest\u api\u init',函数(){
注册rest路由('自定义','/menu/(?P\d+),数组(
'方法'=>'获取',
“回调”=>“可湿性粉剂菜单单”,
) );
} );

我安装了这个插件,但是我得到了一个404,上面有{“code”:“rest\u no\u route”}。你运行哪个URL?确保它是…/wp json/menus/v1/menus
//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',
    ) );
} );
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',
    ) );
} );