如何创建管理员权限小于1或2的角色?

时间:2020-02-03 作者:DevBeppe

我已经创建了一个新角色,我需要为这个角色授予管理员较少的完全权限和能力创建新的管理员用户和编辑插件/主题。是否可以全部召回并只删除我需要的3个,或者我必须在我发布的代码中添加1 x 1(编辑/删除帖子)?

$result = add_role( \'Client\', \'Client\', array(
    \'read\'          => true, 
    \'edit_posts\'    => true,
    \'delete_posts\'  => false, 
) );

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

听起来你想把所有的管理功能都添加到一个角色中,除了你想要的一些关键功能。您可以做的是获得管理员角色,并对不需要的功能进行关键区分。我们必须使用array_diff_key() 因为功能是按名称键入的:

array( \'edit_plugins\' => 1 )
不过,你只想这样做一次。无论何时安装插件,或者可以检查角色是否存在并提前返回。否则,每当管理员角色获得新功能时,您可能会发现新角色也会获得相同的功能。该检查的示例如下所示:

if( role_exists( \'Client\' ) ) {
    return
}
下面是没有上述条件的函数,它显示了如何执行此操作的示例:

/**
 * Adds are new role based on the administrator role capabilities
 * 
 * @return void
 */
function wpse357776_new_role() {

    $admin_role = get_role( \'administrator\' );

    // Array of capabilities you do not want the new role to have.
    $remove_caps = array(
        \'switch_themes\'     => 0,
        \'edit_themes\'       => 0,
        \'activate_plugins\'  => 0,
        \'edit_plugins\'      => 0,
        \'manage_options\'    => 0,
    );

    // Run a diff on the admin role capabilities and the removed rules
    $my_role_caps = array_diff_key( $admin_role->capabilities, $remove_caps );

    // Add the role
    $my_role = add_role( \'Client\', \'Client\', $my_role_caps );

}

add_action( \'after_setup_theme\', \'wpse357776_new_role\' );

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。