我想为一组用户类型(编辑器+自定义角色)提供添加用户/创建用户功能。唯一需要注意的是,我想将该功能限制为仅添加“订阅者”类型的用户,除此之外没有其他功能。有没有办法做到这一点?
仅允许admin以下的角色添加订阅者
2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成
实现这一目标的第一步是将功能添加到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.
SO网友:rkeet
“chrisguitarguy”的答案很好。我对代码做了一个小的修改,让开发局在多站点安装中为客户提供服务。我们需要创建“客户”用户角色,但当然不应允许客户向其域中添加其他客户。根据公认的答案进行修改,我得出以下结论:
/**
* Add filter to ensure a Customer type can NOT create another Customer user
*/
add_filter( \'editable_roles\', \'limit_create_user\' );
function limit_create_user( $roles ){
$user = wp_get_current_user();
if( in_array( \'customer\', $user->roles )){
unset( $roles[ \'customer\' ]);
}
return $roles;
}
希望将来有人能用上它。这在WP3中进行了测试和应用。9.1。结束