add_role()
如果角色已经存在,则不会执行任何操作,因此无法使用它修改功能。要修改功能,请使用add_cap()
和remove_cap()
的方法WP_Role
对象你可以得到WP_Role
为您的角色使用get_role()
:
$role = get_role( \'event-planner\' );
$role->add_cap( \'edit_others_events\' );
但事实是,角色存储在数据库中,因此添加角色或功能是不应该在每次页面加载时发生的事情。如果要修改现有角色,只需修改一次即可。所以这意味着您需要在主题或插件激活时,或者在保存选项页面时执行此操作。开始创建角色也是如此。
有鉴于此,如果这只是一个存在于您站点上的插件/角色,那么您最好只使用以下插件User Role Editor.
如果它是一个分布式插件,您可以在每个页面上加载的钩子中完成,但只需检查一个选项,查看更新是否已经完成:
function wpse_289293_update_role() {
// Get current version of user role.
$version = get_option( \'wpse_289293_roles_version\' )
// Define version number that represents this change.
$new_version = 2;
// If current version is lower than new version.
if ( $version < $new_version ) {
// Update the role.
$role = get_role( \'event-planner\' );
$role->add_cap( \'edit_others_events\' );
// Update db to indicate role has been updated.
update_option( \'wpse_289293_db_version\', $new_version );
}
}
add_action( \'plugins_loaded\', \'wpse_289293_update_role\' );
由于没有在每个页面上强制重新加载角色的功能,这还具有允许用户使用用户角色编辑器插件自己修改功能的优势。如果
add_cap()
每次加载页面时都会运行,这将覆盖他们所做的任何更改。