如何删除整个管理菜单?

时间:2012-05-14 作者:dev-jim

我需要为我的用户自定义管理面板。那么,如何删除整个管理菜单?不删除菜单项,我的意思是完全删除左侧垂直菜单栏,包括菜单的设计(例如,css、背景等等)。我希望它变成空白。

我可以通过css黑客来做到这一点。但我更喜欢用钩子来做。有什么想法吗?

谢谢

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

正确使用的挂钩是admin_menu 然后创建一个函数来删除要删除的菜单。以下2个功能将删除所有菜单。

add_action( \'admin_menu\', \'remove_admin_menus\' );
add_action( \'admin_menu\', \'remove_admin_submenus\' );

//Remove top level admin menus
function remove_admin_menus() {
    remove_menu_page( \'edit-comments.php\' );
    remove_menu_page( \'link-manager.php\' );
    remove_menu_page( \'tools.php\' );
    remove_menu_page( \'plugins.php\' );
    remove_menu_page( \'users.php\' );
    remove_menu_page( \'options-general.php\' );
    remove_menu_page( \'upload.php\' );
    remove_menu_page( \'edit.php\' );
    remove_menu_page( \'edit.php?post_type=page\' );
    remove_menu_page( \'themes.php\' );
}


//Remove sub level admin menus
function remove_admin_submenus() {
    remove_submenu_page( \'themes.php\', \'theme-editor.php\' );
    remove_submenu_page( \'themes.php\', \'themes.php\' );
    remove_submenu_page( \'edit.php\', \'edit-tags.php?taxonomy=post_tag\' );
    remove_submenu_page( \'edit.php\', \'edit-tags.php?taxonomy=category\' );
    remove_submenu_page( \'edit.php\', \'post-new.php\' );
    remove_submenu_page( \'themes.php\', \'nav-menus.php\' );
    remove_submenu_page( \'themes.php\', \'widgets.php\' );
    remove_submenu_page( \'themes.php\', \'theme-editor.php\' );
    remove_submenu_page( \'plugins.php\', \'plugin-editor.php\' );
    remove_submenu_page( \'plugins.php\', \'plugin-install.php\' );
    remove_submenu_page( \'users.php\', \'users.php\' );
    remove_submenu_page( \'users.php\', \'user-new.php\' );
    remove_submenu_page( \'upload.php\', \'media-new.php\' );
    remove_submenu_page( \'options-general.php\', \'options-writing.php\' );
    remove_submenu_page( \'options-general.php\', \'options-discussion.php\' );
    remove_submenu_page( \'options-general.php\', \'options-reading.php\' );
    remove_submenu_page( \'options-general.php\', \'options-discussion.php\' );
    remove_submenu_page( \'options-general.php\', \'options-media.php\' );
    remove_submenu_page( \'options-general.php\', \'options-privacy.php\' );
    remove_submenu_page( \'options-general.php\', \'options-permalinks.php\' );
    remove_submenu_page( \'index.php\', \'update-core.php\' );
}
使用上述2个功能的左菜单屏幕截图:

enter image description here

SO网友:brasofilo

遵循/wp-admin/admin-header.php -> /wp-admin/menu-header.php 没有钩子做这件事。

解决办法是加入admin_head 然后做一些CSS+jQuery

add_action(\'admin_head\', \'wpse_52099_script_enqueuer\');
function wpse_52099_script_enqueuer(){
    if(!current_user_can(\'administrator\')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $(\'#adminmenuback, #adminmenuwrap\').remove();
        });     
        </script>
HTML;
    }
}
[update]
根据对问题的澄清,明确的动机是品牌化管理领域,以下是我使用的4个插件:

SO网友:mrwweb

我所知道的唯一方便钩子的方法是remove_menu_page() 对于每个菜单项。即使这样,我也不知道左栏本身会发生什么情况(它是否会塌陷到0px宽度或什么)。即使使用钩子,我想在某个时候您也会希望将管理样式表排队,以清理菜单标记样式的剩余部分。

我会小心做这件事。例如,如果删除“设置”,则无法访问在“设置”菜单中创建菜单页的任何插件。总的来说,我想知道完全删除菜单到底有多可持续。

SO网友:kakoma
add_action( \'admin_menu\', \'remove_admin_menus\' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}
SO网友:romapad

我改进了@brasofilo的解决方案,因为它有一个小错误-在页面上重新加载时,没有最好的internet连接菜单将在很短的时间内出现。为了避免这种情况,我添加了更多css:

add_action(\'admin_head\', \'wpse_52099_script_enqueuer\');

function wpse_52099_script_enqueuer() {

    if(!current_user_can(\'administrator\')) { 

echo <<<HTML
<style type="text/css">
#wpcontent, #footer { margin-left: 0px !important; }
#adminmenuback, #adminmenuwrap { display: none !important; }
</style>
<script type="text/javascript">
jQuery(document).ready( function($) {
    $(\'#adminmenuback, #adminmenuwrap\').remove();
});
</script>
HTML;

    }
}

结束