添加管理页面,但不在管理菜单上显示

时间:2012-11-22 作者:David Gard

我有一个自定义插件“图表”,它有自己的菜单。该菜单中有指向插件的3个页面的链接-“Charts”、“Add Chart”和“Edit Chart”。但是,我不想显示“编辑图表”的链接。

下面是我如何添加有问题的页面-

$this->pagehook = add_submenu_page(\'charts\', __(\'Edit Chart\'), __(\'Edit Chart\'), \'edit_charts\', \'edit-chart\', array(&$this, \'on_show_page\'));
我已经在互联网上搜索过了,但找不到这样做的方法。可以删除整个顶级菜单(不是我需要的),并且可以从$submenu 全局(但这样做也会删除已注册的功能),因此任何人都无法访问该页面-

global $submenu;
if(!empty($submenu[\'charts\'])) : foreach($submenu[\'charts\'] as $key => $page) :
        if($page[0] === \'Edit Chart\') :

            /** Removes all permissions to access the page */
            //unset($submenu[\'charts\'][$key]);              
            /** Removes the title, but the menu entry still exists, so it looks odd */
            $submenu[\'charts\'][$key][0] = \'\';

        endif;
    endforeach;
endif;
我想通过CSS来隐藏它,但找不到通过Wordpress生成的HTML来实现这一点的方法-

<li><a href="admin.php?page=edit-chart" tabindex="1">Edit Chart</a></li>
我也考虑过jQuery,但这与CSS路线有类似的限制,而且我不相信我是唯一一个希望这样做的人——一定有办法,我就是找不到!

任何提示和提示。

谢谢

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

使用子菜单页作为父slug。“管理”菜单只有两个级别,因此将隐藏假想的第三个级别。

测试样本代码:

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

function wpse_73622_register_hidden_page()
{
    add_submenu_page(
        \'options-writing.php\',
        \'Hidden!\',
        \'Hidden!\',
        \'exists\',
        \'wpse_73622\',
        \'wpse_73622_render_hidden_page\'
    );
    # /wp-admin/admin.php?page=wpse_73622
}

function wpse_73622_render_hidden_page()
{
    echo \'<p>hello world</p>\';
}

SO网友:lanicor

从上的文档add_submenu_page(), 您可以通过设置子菜单链接所属的顶级菜单项来隐藏子菜单链接slug (第一个参数)到null:

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

function register_my_custom_submenu_page() {
    add_submenu_page( 
        null,
        \'My Custom Submenu Page\',
        \'My Custom Submenu Page\',
        \'manage_options\',
        \'my-custom-submenu-page\',
        \'my_custom_submenu_page_callback\',
    );
}
要突出显示所需的菜单项(例如,访问隐藏的“编辑图表”页面时的“所有图表”),可以执行以下操作:

add_filter( \'submenu_file\', function($submenu_file){
    $screen = get_current_screen();
    if($screen->id === \'id-of-page-to-hide\'){
        $submenu_file = \'id-of-page-to-higlight\';
    }
    return $submenu_file;
});

SO网友:Plamen Kostadinov

您可以使用CSS,并且可以通过href标记中的URL访问它:

#adminmenu a[href="admin.php?page=edit-chart"] { 
    display: none;
}
父LI元素没有额外的填充或间距,因此不需要隐藏它。您还可以访问子菜单。

结束

相关推荐

Order Admin sub-menu items?

我正在使用向CPT管理菜单添加项目add_submenu_page 这很好,但它们被添加到CPT选项后的子菜单底部。我希望能够将它们放在最上面,但我想这个问题也可以应用于订购所有基于管理员的子菜单项。我所尝试的(不起作用,我尝试了几种变体),function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( \'edi