使用wp_GET_CURRENT_USER()时更新的用户角色不正确

时间:2018-08-15 作者:Swen

我在更新用户角色时遇到了一个问题,然后在代码后面的某个地方检查当前角色。

经过一整天的调试和一夜的休息,我偶然发现了它。

请参见以下示例:

// Get current user object
$user = wp_get_current_user();  

// Set new role
$user->remove_role( \'member_pending\' );
$user->add_role( \'member\' );

// ... Later in another function

// Trying to get the updated role
$user = wp_get_current_user(); 
$role = $user->roles; // Returns "member_pending"

// Going through another hoop to get the role
$user = get_user_by(\'ID\', wp_get_current_user()->ID);
$role = $user->roles; // Return the correct role "member"
我也试过使用wp_cache_flush() 使用前wp_get_current_user()->roles, 但它仍然显示了错误的角色。

就像我说的,我已经想出了如何“修复”这个问题,但由于我花了一整天的时间来解决这个问题,I want to actually understand why it happens.

1 个回复
最合适的回答,由SO网友:Swen 整理而成

再次偶然发现同样的问题,下面是如何解决它。

由于某些原因,您不能使用wp_get_current_user(), 因为数据在刷新之前不会更新。

因此,您使用get_user_by().

// The updated current user
$updated_current_user = get_user_by( \'ID\', wp_get_current_user()->ID );

结束