如何删除整个管理菜单?


14

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

我可以通过CSS hack做到这一点。但是我更喜欢使用钩子来做到这一点。有任何想法吗?

谢谢


我很好奇。如果您的用户不需要访问任何管理菜单项,为什么他们根本不需要访问仪表板?
morideida

想知道动机...您想为特定角色/用户隐藏它吗?您是否正在制作自定义管理栏菜单(在顶部)?
brasofilo 2012年

1
是的,我想自定义管理菜单。并不是说当前的管理菜单还不够好,而是“ wordpress”的感觉。我认为,这不利于品牌推广。
dev-jim 2012年

请在这里检查我以前的答案;wordpress.stackexchange.com/questions/136058/…–
numediaweb

Answers:


16

要使用的正确钩子是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' );
}

使用以上两个功能的左侧菜单的屏幕截图:

在此处输入图片说明


3
我的确找到了另一种方法$GLOBALS['menu'] = array();。在数组中设置null也可以完成工作。
dev-jim 2012年

你把它放在哪里?

有人注意到该屏幕快照中的最新草稿了吗?;)
acSlater 2013年

5

遵循/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;
    }
}

[更新]
根据对这个问题的澄清,可以清楚地看到动机是在管理领域打上烙印,这是我使用的4个插件:


如果你走这条路线,这让使用更感wp_enqueue_script()admin_enqueue_script挂钩。
mrwweb 2012年

1
@mrwweb即使是这么小的插入?您认为值得吗?
brasofilo 2012年

同意 使用可以更轻松地完成小的脚本/样式插入admin_head
chrisguitarguy,2012年

除非别无选择,否则我不喜欢使用jquery。如果访客禁用其浏览器上的javascript怎么办?虽然不可能发生,但是有可能发生。无论如何,谢谢您的建议。
dev-jim 2012年

在我的示例中,通过在CSS中也隐藏2个div来实现双重删除的问题。
brasofilo 2012年

2

我知道的唯一对钩子友好的方法是remove_menu_page()用于每个菜单项。即使那样,我也不知道左栏本身会发生什么(它是否会缩小到0px宽度或什么)。即使使用钩子,我也想在某个时候您将需要排队一个管理样式表来清理菜单标记样式的剩余内容。

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


我确定他正在寻找一种删除普通用户而非管理员菜单的方法。:)
克里斯汀·库珀

1
add_action( 'admin_menu', 'remove_admin_menus' );

function remove_admin_menus(){
    global $menu;
    $menu = array();
}

这个答案也很方便。它很短,并且像魅力一样起作用,除了由插件创建的菜单页面。(这应该不是问题,因为它们仅对管理员可见)
Charles

这确实是一个简便的解决方案,但是值得一提的是,它实际上不会阻止对那些管理页面的访问,只会使它们在管理栏中不可见。当然,它比用于隐藏项目的CSS解决方案要好,但是在安全性方面仍然存在缺陷:聪明的用户仍然可以通过编辑URL来直接访问管理页面。
Marcos Buarque '18年

0

我改进了@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;

    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.