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



我想在我的插件激活时将具有特定域名 (@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' );

你可以试试这段代码,看看它是否有效:

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');

确保此代码放置在主插件文件中。

最新更新