如何通过REST API访问worpress菜单项?

时间:2018-08-09 09:44:34

标签: wordpress wordpress-rest-api

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

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

3 个答案:

答案 0 :(得分:1)

如何?您可以使用以下路线访问“主”菜单-> https://your-wp-domain-url.com/wp-json/custom-name/menu

并确保使用register_nav_menus()中的“主”菜单。 在我的functions.php的WP主题中,有以下几行。( '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',
    ) );
} );

答案 1 :(得分:0)

第一步:安装WP-REST-API V2菜单 https://wordpress.org/plugins/wp-rest-api-v2-menus/

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

答案 2 :(得分:0)

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

这里有两个函数可用于将菜单添加到 REST API 并检索单个菜单项。

这使我们可以同时访问:
https://your-wp-domain-url.com/wp-json/custom/menu
https://your-wp-domain-url.com/wp-json/custom/menu/{menuID}

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