Users: Share current user instance across functions.

Share the `WP_User` instance for the current user between the functions `get_userdata()` and `wp_get_current_user()`. Both functions return the `$current_user` global for the current user.

Force refresh the `$current_user` global within `clean_user_cache()` by immediately re-calling `wp_set_current_user()` with the current user's ID. This ensures any changes to the current user's permissions or other settings are reflected in the global. As a side-effect this immediately rewarms the current user's cache.

Props chaion07, chriscct7, donmhico, hellofromtonya, lukecarbis, peterwilsoncc, rmccue, TimothyBlynJacobs.
Fixes #28020.


git-svn-id: https://develop.svn.wordpress.org/trunk@50790 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Peter Wilson
2021-04-26 01:02:34 +00:00
parent c44e1d6fe4
commit ecd93af74a
3 changed files with 34 additions and 0 deletions

View File

@@ -324,4 +324,19 @@ class Tests_Pluggable extends WP_UnitTestCase {
return $signatures;
}
/**
* @ticket 28020
*/
public function test_get_user_by_should_return_same_instance_as_wp_get_current_user() {
// Create a test user
$new_user = self::factory()->user->create( array( 'role' => 'subscriber' ) );
// Set the test user as the current user
$current_user = wp_set_current_user( $new_user );
// Get the test user using get_user_by()
$from_get_user_by = get_user_by( 'id', $new_user );
$this->assertSame( $current_user, $from_get_user_by );
}
}