实现这一目标的第一步是将功能添加到create_users
指定角色。你这么做是在打电话get_role
, 然后使用add_cap
方法这只需要做一次。这里有一个插件激活的例子。
<?php
register_activation_hook( __FILE__, \'wpse42003_activation\' );
function wpse42003_activation()
{
foreach( array( \'editor\', \'your_custome_role\' ) as $r )
{
$role = get_role( $r );
if( $role )
$role->add_cap( \'create_users\' );
}
}
如果这样做,可能需要确保在插件停用时使用
remove_cap
.
<?php
register_deactivation_hook( __FILE__, \'wpse42003_deactivation\' );
function wpse42003_deactivation()
{
foreach( array( \'editor\', \'your_custome_role\' ) as $r )
{
$role = get_role( $r );
if( $role )
$role->remove_cap( \'create_users\' );
}
}
现在的问题是确保这些用户只能注册订阅者。在
user-new.php
第页,角色下拉列表由一个名为
wp_dropdown_roles
, 然后调用函数
get_editable_roles
获取当前用户可以编辑/创建的角色。
幸运的是,这里有一个过滤器,允许我们修改这个位。首先,我们将复制所有$roles
数组键,然后循环并取消设置订阅服务器以外的任何角色$roles
-- 仅当当前用户具有角色编辑器或自定义角色时。
<?php
add_filter( \'editable_roles\', \'wpse42003_filter_roles\' );
function wpse42003_filter_roles( $roles )
{
$user = wp_get_current_user();
if( in_array( \'editor\', $user->roles ) || in_array( \'your_custom_role\', $user->roles ) )
{
$tmp = array_keys( $roles );
foreach( $tmp as $r )
{
if( \'subscriber\' == $r ) continue;
unset( $roles[$r] );
}
}
return $roles;
}
这其中的好处是
get_editable_roles
在添加或更新用户之前调用—编辑器将无法通过在JS或类似的表单中插入额外选项来添加用户。
note: change your_custom_role
in the examples above to your role\'s name.
所有这些as a plugin.