听起来你想把所有的管理功能都添加到一个角色中,除了你想要的一些关键功能。您可以做的是获得管理员角色,并对不需要的功能进行关键区分。我们必须使用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\' );