从用户列表中的“Change Role to”菜单中删除Superadmin角色

时间:2017-07-22 作者:t2m

在我的多站点网络中,我使用“用户角色编辑器”插件为角色分配功能。我希望子站点的站点管理员(administrators)能够将任何用户的角色更改为超级管理员角色以外的任何其他角色。根据我有限的理解,实现这一点的唯一方法是在用户列表页面上的“将角色更改为”菜单选项中隐藏超级管理员角色。

我可以使用以下可用代码隐藏上述菜单的管理员和编辑器角色here:

function wdm_user_role_dropdown($all_roles) {

    global $pagenow;

    if( current_user_can(\'editor\') && $pagenow == \'user-edit.php\' ) {
        // if current user is editor AND current page is edit user page
        unset($all_roles[\'administrator\']);
        unset($all_roles[\'editor\']);
    }

    return $all_roles;
}
add_action (\'editable_roles\',\'wdm_user_role_dropdown\');
基于此,我尝试使用以下代码根据需要隐藏超级管理员角色:

function schoolers_user_role_dropdown($all_roles) {

    global $pagenow;

    if( current_user_can(\'remove_users\') && $pagenow == \'user-edit.php\' ) {
        // if current user can "remove_users" AND current page is edit user page
        unset($all_roles[\'administrator\']);
        unset($all_roles[\'superadmin\']);
    }

    return $all_roles;
}
add_action(\'editable_roles\',\'schoolers_user_role_dropdown\');  
然而,这段修改过的代码并没有隐藏超级管理员。

在编辑参考代码时,我假设超级管理员角色的slug是superadmin或Super\\u admin。但当两者都不起作用时,我搜索了所需的slug,偶然发现超级管理员角色没有slug。因此,我们可能无法像那样隐藏超级管理员。

是否有人可以建议对上述代码进行更正和/或帮助使用其他方法来实现我所需要的?

谢谢

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

事实证明,这不是一个普遍的问题。这是由于“用户角色编辑器”插件本身,所以不使用主题插件的人可能不会面临这样的问题。

无论如何,“用户角色编辑器”插件的作者现在已经提供了一个解决方案来规避这种默认行为here. 因此,必须使用以下代码段:

    add_filter (\'ure_not_block_other_roles_for_local_admin\',\'my_not_block_other_roles_for_local_admin\');

function my_not_block_other_roles_for_local_admin($flag) {
         return false;
}

结束

相关推荐

Multisite switch to blog

在我开始这个问题之前,我很抱歉,因为我在本地工作,所以我没有任何代码可以显示。我有一个Wordpress多站点,有3个站点-“site-1”、“site-2”、“site-3”。它们都导入相同的导航部分。php”,从模板文件夹。导航是硬编码的,但动态地从“site-2”中为site-2按钮提取内容在导航部分的开头。php“我获取当前博客id,然后切换到“site-2”。 $the_blog_id = get_current_blog_id(); switch_to_blog(2);&