WordPress后台删除不需要的侧边栏菜单

日期: 标签:CMSWordPress教程企业建站 53 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

     本文是WordPress企业建站系列教程的第一篇文章,需要说明的是,如果想你学习这个企业建站的系列教程,需要你有一点点的WordPress主题或PHP开发基础,没有基础的也可以依样画葫芦,出错了可以给我留言。

自定义后台的侧边栏顶级菜单

     首先让我们看看,什么是后台的侧边栏菜单:

     上图就是使用管理员账号登陆后看到的侧边栏所有的菜单项,WordPress给不同角色的用户定义了不同功能的使用权限,所以不同角色的用户后台所看到侧边栏菜单项都是不一样的。这个时候需求又来了,有些时候即使是管理员,部分菜单也是用不到了,例如用WordPress来建一个企业介绍性的网站,该站点根本没有添加评论功能,那么侧边栏的评论菜单是用不着的,如果让企业用户看到,他们会感到很迷惑。所以最好的办法是,根据实际情况,把不该有的侧边栏管理菜单删掉。具体实现办法是在当前主题的functions.php 第一个 <?php 后面添加以下代码:

function remove_menus() {
  global $menu;
  $restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
  end ($menu);
  while (prev($menu)){
    $value = explode(' ',$menu[key($menu)][0]);
    if(strpos($value[0], '<') === FALSE) {
      if(in_array($value[0] != NULL ? $value[0]:"" , $restricted)){
        unset($menu[key($menu)]);
      }
    }
    else {
      $value2 = explode('<', $value[0]);
      if(in_array($value2[0] != NULL ? $value2[0]:"" , $restricted)){
        unset($menu[key($menu)]);
      }
    }
  }
}

if ( is_admin() ) {
  // 删除左侧菜单
  add_action('admin_menu', 'remove_menus');
}

自定义要去除的顶级菜单

     以上代码核心部分是一个函数remove_menus(),然后通过WordPress的动作接口函数add_action来执行remove_menus函数。在remove_menus函数中,通过$restricted数组来定义需要删除哪些菜单项,以上$restricted数组提供了全部菜单项,也就是说如果你全部将以上代码不做修改地复制到functions.php,那你的WordPress后台就没有任何菜单了,你应该根据实际需要去除菜单,下面讲讲$restricted各个数组项对应的菜单:

  • __('Dashboard') : 控制板菜单
  • __('Posts') : 文章
  • __('Media') : 媒体
  • __('Links') : 链接
  • __('Pages') : 页面
  • __('Comments') : 评论
  • __('Appearance') : 外观
  • __('Plugins') : 插件
  • __('Users') : 用户
  • __('Tools') : 工具
  • __('Settings') : 设置

     例如你只想去除评论工具菜单,你只需改写以上代码第3行的$restricted数组:

$restricted = array(__('Comments'), __('Tools'));

删除不必要的子菜单

     WordPress后台的顶级菜单下面还有子菜单,当然有些子菜单是用不到的,我们也可以将其删除,WordPress 3.1以后的版本只需用到一个函数remove_submenu_page( $menu_slug, $submenu_slug ),这里有两个参数,$menu_slug是子菜单所在顶级菜单的缩略名,$submenu_slug为子菜单的缩略名,那如何获得这两个缩略名呢?例如,点击顶级菜单设置,链接地址类似:
     http://example/wp-admin/options-general.php

     那么顶级菜单设置的缩略名为options-general.php,也就是去除http://example/wp-admin/后剩下的东西,依次类推;接着点击顶级菜单设置下面的子菜单隐私,会打开以下网址:
     http://example/wp-admin/options-privacy.php

     那么子菜单隐私的缩略名为options-privacy.php,好了,就这么简单,下面是实现代码,:

function remove_submenu() {
	// 删除"设置"下面的子菜单"隐私"
	remove_submenu_page( 'options-general.php', 'options-privacy.php' );

	// 删除"外观"下面的子菜单"编辑"
	remove_submenu_page( 'themes.php', 'theme-editor.php' );
}

if ( is_admin() ) {
    add_action('admin_init','remove_submenu');
}

根据用户角色去除菜单

     如果你想按用户角色来去除相应的侧边栏菜单,那就再做一下用户等级的判断就可以了,给第11行的add_action添加判断,改写成:

function remove_menus() {
    global $menu;

    // 这里$restricted设置了评论和工具菜单
    $restricted = array(__('Comments'), __('Tools'));
    end ($menu);
    while (prev($menu)){
        $value = explode(' ',$menu[key($menu)][0]);
        if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
    }
}

function remove_submenu() {
	remove_submenu_page( 'options-general.php', 'options-privacy.php' );
}

global $current_user;
get_currentuserinfo();

//如果当前用户的等级小于3,那么就删除对应的菜单
if ($current_user->user_level < 3 && is_admin()) {
    add_action('admin_menu', 'remove_menus');
    add_action('admin_init','remove_submenu');
}

     在WordPress后台 – 用户那里,管理员可以查看 / 编辑用户的角色,以下是用户角色和其等级的对应关系:

  • 0 级对应 订阅者
  • 1 级对应 投稿者
  • 2 – 4 级对应 作者
  • 5 – 7 级对应 编辑
  • 8 – 10 级对应 管理员

     WordPress 3.0 之后将逐渐弃用用户数字等级,推荐使用户权限,可以用函数current_user_can()来判断用户权限。

使用超简单的插件

     下面推荐一个使用超简单的插件,不需要任何编码,只需拖拖鼠标就可以实现上面所说的大部分功能。插件名称是:Admin Menu Editor,可以点此前往WordPress官方下载,启用后到设置 - Menu Editor,就可以编辑后台的菜单了,还可以添加外链菜单,可以调整菜单顺序等等,剩下的你自己体验吧!

更多的WordPress菜单项设置,请阅读以下文章(英文):
Remove WordPress Admin Menu Without Affecting WordPress Core System

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/remove-admin-menu-in-wordpress.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

53 条留言

点此留言
1 2 182
  1. 高高

    露兜大大,请教一个一直困扰我的问题,如何在ie7下显示后台的dashicons图标,测试使用ie9.js无效,有没有好的办法?

  2. vkge

    用户权限保存在哪个数据表

  3. Ludou

    @vkge _options

  4. uu5438

    这样所有用户都移除了,对于多管理员的网站不适用,ID=1的用户不移除应该怎么修改呢

  5. 露兜

    @uu5438 注意看文中"根据用户角色去除菜单"
    user_level改成ID,条件自己改

  6. 阿毛

    如果要在后台删除评论菜单的话,竟然删不掉,比如
    $restricted = array(__('Comments'), __('Tools'));
    这里写Comments的话,在后台刷新后,评论菜单竟然还在。。。有解决办法吗?

  7. 露兜

    @阿毛 之前也有网友提过,但我在WordPress最新版测试正常,请检查是不是跟其他插件,或者你的主题代码冲突了。禁用所有插件,使用默认主题试试。
    再不行,可以用这款插件:Admin Menu Editor

  8. 朱凯博客

    @阿毛 remove_menu_page( 'edit-comments.php' );

  9. ilikecss

    HI, 你知道add_nodes_and_groups后面新加的id如何提到原来内容的前面 ?
    >1
    >2
    >3
    >4
    改变成:
    >4
    >1
    >2
    >3

  10. lili

    怎么去除文章下子菜单 分类目录和标签啊,客户不需要看到。。
    remove_submenu_page( 'edit.php', 'edit-tags.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    我都试了,没有效果

  11. 露兜

    @lili function remove_submenu() {
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    }

    if ( is_admin() ) {
    add_action('admin_init','remove_submenu');
    }

  12. evy

    太感谢了,博主些的好详细

  13. 米粒在线

    技术高手啊。学习了。

1 2

发表留言