自定义WordPress插件激活后,更改来自特定域的电子邮件地址的所有用户的角色

时间:2018-08-14 14:41:53

标签: php wordpress plugins

激活插件后,我想将具有特定域名(@ example.com)的所有用户的角色更改为自定义角色。

当用户注册并尝试使其适应我的需求时,我发现了一些用于执行此操作的代码,但是它似乎不起作用。激活插件后没有任何反应。角色没有改变,我也不会弹出任何错误,因此我不确定自己在做什么错。

我仍在学习PHP,所以如果这没有道理,请原谅我。

这是我的代码:

function set_role_by_email( $user_id ){
$user = get_user_by( 'id', $user_id );
$domain = substr(
    strrchr(
        $user->data->user_email, 
        "@"
    ), 1
); //Get Domain

$custom_role_domains = array( 'example.com' );
if( in_array( $domain, $custom_role_domains ) ){
        foreach( $user->roles as $role )
            $user->remove_role( $role ); //Remove existing Roles
        $user->add_role( 'custom_role' ); //Add role to user
    }
}
register_activation_hook( __FILE__, 'set_role_by_email' );

1 个答案:

答案 0 :(得分:1)

您可以尝试下面的代码,看看它是否有效:

function set_role_by_email()
{
    $users = get_users();
    foreach ($users as $user) {
        if (strpos($user->user_email, '@example.com')) {
            foreach ($user->roles as $role) {
                 $user->remove_role($role);
            }
             $user->add_role('custom_role');
        }
    }
}
register_activation_hook(__FILE__, 'set_role_by_email');

确保此代码位于主插件文件中。