EDIT
如果当前用户角色不在
roles_to_change
数组,然后函数退出。
请注意,我没有测试错误,因此如果您发现任何错误,请在此处报告。
马利萨的回答是一个很好的方法。但是,如果您仍然想挂接页面加载,可以尝试template_redirect
钩
您需要某种逻辑来只在特定用例上运行代码。因此,假设您已经拥有该逻辑,并且当您尝试更改用户的角色时,该用户已经登录。
像这样的东西应该有用
add_action( \'template_redirect\', \'my_change_user_role\' );
function my_change_user_role(){
$current_user = wp_get_current_user();
// Bail if no one is logged in
if( 0 == $current_user->ID )
return;
// Fetch the WP_User object of our user.
$cur_user = new WP_User( $current_user->ID );
// Only Apply to users within these roles
$roles_to_change = array(
\'role_x\',
\'role_y\',
\'role_z\'
);
$make_change = false; // Flag telling to make the changes or not
// Check if we can make the change to the current user
foreach( $roles_to_change as $change ){
foreach ( $cur_user->roles as $user_role ){
if( $change == $user_role ){
$make_change = true;
continue;
}
}
}
// Bail if role is not within those we want to make a change for
if( ! $make_change )
return;
// Replace the current role with our \'new_role\' role
$cur_user->set_role( \'new_role\' );
}
如果您以某种形式使用它,您可以使用
$_GET
或
$_POST
superglobal传递有关用户的一些信息(例如ID)。