如何只添加顶级管理菜单而不创建子菜单

时间:2015-10-24 作者:dave

以下是代码片段:

    add_action( \'admin_menu\', \'travel_site\' );

function travel_site(){
    add_menu_page( \'Travel Site Menu\', \'Travel Site\', \'manage_options\', \'travel-site-menu\', \'ts_admin_main_page\' );
    add_submenu_page("travel-site-menu","View Travel Requests","View Travel Requests","manage_options","ts-view-travel-requests","ts_admin_vtr_page");
}

function ts_admin_main_page(){
    echo \'<div class="wrap">\';
    echo    \'<p>Testing main travel site menu page</p>\';
    echo \'</div>\';
}

function ts_admin_vtr_page(){
    echo \'<div class="wrap">\';
    echo    \'<p>Testing view travel requests</p>\';
    echo \'</div>\';
}
问题是,在添加子菜单时,顶级菜单(“旅游网站”)的名称将自己创建为子菜单。请参见图片:enter image description here

基本上我不想在主菜单“Travel Site”下使用“Travel Site”子菜单,如何删除子菜单“Travel Site”?

2 个回复
最合适的回答,由SO网友:dbmpls 整理而成

实际上,您可以通过添加与顶层具有相同菜单段符号的子级项,同时更改子菜单项标题来实现这一点。这避免了重复菜单项的外观,即使顶层和第一个子菜单项的目标相同。

您必须至少有两个子菜单项,其中一个子菜单项将作为顶级菜单项复制目的地。

例如:

add_action( \'admin_menu\', \'add_travel_menu\' );
function add_travel_menu() {
        add_menu_page(\'Travel Site Menu\', \'Travel Site\', \'manage_options\', \'travel-site-menu\', \'ts_admin_main_page\');
        add_submenu_page(\'travel-site-menu\', \'Travel Site\', \'View Travel Site\', \'manage_options\', \'travel-site-menu\', \'ts_admin_main_page\');
        add_submenu_page(\'travel-site-menu\', \'View Travel Requests\', \'View Travel Requests\', \'manage_options\', \'ts-view-travel-requests\', \'ts_admin_main_page\');
}
function ts_admin_main_page() {
    if ( !current_user_can( \'manage_options\' ) )  {
        wp_die( __( \'You do not have sufficient permissions to access this page.\' ) );
    }
    echo \'<div class="wrap">\';
    echo \'<p>Here is where the form would go if I actually had options.</p>\';
    echo \'</div>\';
}
这将创建以下菜单:

旅游网站->旅游网站菜单查看旅游网站->旅游网站菜单查看旅游请求->ts查看旅游请求

enter image description here

功能ts\\u admin\\u main\\u页面实际上创建了一个页面,该页面将作为“旅游网站”和“查看旅游网站”的目标。您需要创建类似的函数“ts\\u admin\\u vtr\\u page”,该函数将为“查看旅行请求”创建子页目的地。

SO网友:chrisguitarguy

没有什么好方法可以做到这一点。签出_wp_menu_output 作用它是完成菜单输出的所有工作的地方。看到了吗$submenu_as_parent 参数和how it\'s used? 将其设置为false将生成所需的结果,但没有任何过滤器可以真正实现这一点。有一个open ticket 在这件事上,但一年多来一直没有采取任何行动。除了编辑核心文件(坏主意),如果没有一些输出缓冲和非常脆弱的解决方案,就无法解决这个问题。