Php 在自定义WordPress插件激活后,更改具有特定域电子邮件地址的所有用户的角色
当我的插件被激活时,我想将具有特定域名(@example.com)的所有用户的角色更改为自定义角色 我找到了一些代码,当用户注册并试图使其适应我的需要时,我可以这样做,但它似乎不起作用。当我激活插件时,不会发生任何事情。角色不会改变,我也不会出现任何错误,所以我不太确定我做错了什么 我仍在学习PHP,如果这不合理,请原谅我 这是我的密码:Php 在自定义WordPress插件激活后,更改具有特定域电子邮件地址的所有用户的角色,php,wordpress,plugins,Php,Wordpress,Plugins,当我的插件被激活时,我想将具有特定域名(@example.com)的所有用户的角色更改为自定义角色 我找到了一些代码,当用户注册并试图使其适应我的需要时,我可以这样做,但它似乎不起作用。当我激活插件时,不会发生任何事情。角色不会改变,我也不会出现任何错误,所以我不太确定我做错了什么 我仍在学习PHP,如果这不合理,请原谅我 这是我的密码: function set_role_by_email( $user_id ){ $user = get_user_by( 'id', $user_id );
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');
确保将此代码放在主插件文件中。首先要检查的是:此挂钩是否实际运行?在里面放一些回音,看看注册后是否打印出来<代码>文件应该指向好主意!我添加了回声,它被拾取,所以至少我知道钩子现在正在运行。但似乎还是不能让它正常工作。工作起来很有魅力。非常感谢。