所以我一直在为自定义角色而苦恼。我将尽可能描述我的问题,以突出我的问题。在任何人提到它之前,我想避免使用插件,因为对我来说,这是对我认为是一个简单问题的过度杀伤力。
我想要的:3个角色-管理员、小管理员、用户
我最初尝试的是:我删除了两个角色Author&;Contributor,离开Administrator、Editor和Subscriber。这没问题。我对下一篇文章有一个问题——重命名其余的角色。
我最初只是做了最常见的建议
global $wp_roles;
$wp_roles->roles[\'editor\'][\'name\'] = \'Lesser Admin\';
$wp_roles->role_names[\'editor\'] = \'Lesser Admin\';
对于最后两个角色(我保持Admin不变,因为它足够接近)。但这不起作用。不管我用什么钩子钩住它(我把它放在下面
add_action(\'init\',...)
但这并不奏效。
所以我试着装腔作势,编写了自己的代码来处理这个问题。
function permissionsModification(){
$blogs = wp_get_sites();
$current_blog = get_current_blog_id();
foreach($blogs as $blog):
switch_to_blog($blog[\'blog_id\']);
if(get_role(\'author\') !== null)
remove_role(\'author\');
if(get_role(\'contributor\') !== null)
remove_role(\'contributor\');
$toChange = array(
\'editor\' => array(\'lesser\', \'Lesser Admin\'),
\'subscriber\' => array(\'user\', \'User\')
);
foreach($toChange as $old => $new):
$role = get_role($old);
if($role !== null):
if(get_role($new[0]) === null)
add_role($new[0], $new[1], $role->capabilities);
$users = get_users(array(\'role\'=>$old));
foreach($users as $user):
$user->remove_role($old);
$user->add_role($new[0]);
endforeach;
$opt = get_option(\'default_role\');
if($opt === $old)
set_option(\'default_role\', \'administrator\');
remove_role($old);
endif;
endforeach;
endforeach;
switch_to_blog($current_blog);
}
add_action(\'init\',\'permissionsModification\');
好消息是:它确实成功地重命名了角色,旧角色也消失了。
坏消息:一个非常奇怪的错误正在发生。在功能中,到处都会出现“未定义索引:名称”错误。php。我搜索了数据库(具有phpMyAdmin访问权限),发现在其中一个站点中,订阅者角色仍然存在!我认为这可能与默认角色有关,因此由于禁止注册,我将其设置为管理员进行测试,但仍然没有骰子(尽管它确实将其设置为默认角色)。
查看network admin user(网络管理用户)面板会显示一个“空”空间,用于放置角色,如果您检查元素,它的值为subscriber。所以我很确定订阅者角色的名称被删除了,这就是错误的来源。
现在,有趣的部分是,我用print_r
到处都是谜团——订阅者角色确实被删除了。但我不知道它是如何重新加入的。我想知道这是否与这是一个多站点wordpress有关,因为订阅者角色只存在于一个表中。但我仍然有点不知道如何修复它。
任何建议都将不胜感激。