在WordPress中,创建自定义角色非常简单,还可以将特定功能分配给特定的用户角色(无论是从核心还是自定义)。
在我的插件中,我经常创建一个具有插件所需所有功能的用户角色,然后我将其中一些功能附加到现有角色上。
我给你举个例子,我认为这会帮助你面对这个问题。
假设您创建的插件需要3种功能:
您可以创建custom role 这三种功能都具备
将所有三个类别分配给管理员,将“do\\u bar”和“do\\u baz”分配给编辑、作者和撰稿人,仅将“do\\u baz”分配给订阅者,以下简单功能完成所有之前的操作:
function my_plugin_custom_caps()
{
$caps = array(\'do_foo\' => true, \'do_bar\' => true, \'do_baz\' => true);
// First of all create the new user role, add all custom caps + \'read\'
add_role( \'myrole\', \'My Role\', array_merge( $caps, array( \'read\' => true ) ) );
// Set specific caps to specific roles.
// 1. prepare the roles array
$all_roles = array(\'administrator\', \'editor\', \'author\', \'constributor\', \'subscriber\');
// 2. get WP_Roles object to do the work
$roles_obj = new WP_Roles();
// 3. Loop roles and assign caps
foreach ( $all_roles as $role ) {
// 4. cycle the caps and assign them one by one using some logic to assign right caps
foreach ( $assign as $cap ) {
if( $role === \'subscriber\' && $cap !== \'do_baz\' ) continue;
if( $role !== \'administrator\' && $cap === \'do_foo\' ) continue;
$roles_obj->add_cap( $role, $cap );
}
}
}
WordPress在数据库上保存功能后,最好在插件激活时执行此任务,因此它只运行一次:
register_activation_hook( __FILE__, \'my_plugin_custom_caps\' );
当插件被停用时,删除添加的功能和自定义角色也是一个好习惯,因此您可以创建
my_plugin_custom_caps_undo
函数并与一起使用
register_deactivation_hook
.
该函数几乎与my_plugin_custom_caps()
, 但是remove_role
使用而不是add_role
和remove_cap
而不是add_cap
:
function my_custom_caps_undo() {
remove_role( \'myrole\' );
$caps = array(\'do_foo\' => true, \'do_bar\' => true, \'do_baz\' => true );
$all_roles = array(\'administrator\', \'editor\', \'author\', \'constributor\', \'subscriber\');
$roles_obj = new WP_Roles();
foreach ( $all_roles as $role ) {
foreach ( $caps as $cap ) {
if( $role === \'subscriber\' && $cap !== \'do_baz\' ) continue;
if( $role !== \'administrator\' && $cap === \'do_foo\' ) continue;
$roles_obj->remove_cap( $role, $cap );
}
}
}
register_deactivation_hook( __FILE__, \'my_custom_caps_undo\' );