diff --git a/wp-includes/pluggable.php b/wp-includes/pluggable.php index b5e39d7a19..0e4cbe80e1 100644 --- a/wp-includes/pluggable.php +++ b/wp-includes/pluggable.php @@ -91,18 +91,25 @@ if ( ! function_exists( 'get_user_by' ) ) : * * @since 2.8.0 * @since 4.4.0 Added 'ID' as an alias of 'id' for the `$field` parameter. + * @since 5.8.0 Returns the global `$current_user` if it's the user being fetched. * * @param string $field The field to retrieve the user with. id | ID | slug | email | login. * @param int|string $value A value for $field. A user ID, slug, email address, or login name. * @return WP_User|false WP_User object on success, false on failure. */ function get_user_by( $field, $value ) { + global $current_user; + $userdata = WP_User::get_data_by( $field, $value ); if ( ! $userdata ) { return false; } + if ( $current_user instanceof WP_User && $current_user->ID === (int) $userdata->ID ) { + return $current_user; + } + $user = new WP_User; $user->init( $userdata ); diff --git a/wp-includes/user.php b/wp-includes/user.php index 048bb4c511..8a94526df2 100644 --- a/wp-includes/user.php +++ b/wp-includes/user.php @@ -1561,10 +1561,15 @@ function update_user_caches( $user ) { * * @since 3.0.0 * @since 4.4.0 'clean_user_cache' action was added. + * @since 5.8.0 Refreshes the global user instance if cleaning the user cache for the current user. + * + * @global WP_User $current_user The current user object which holds the user data. * * @param WP_User|int $user User object or ID to be cleaned from the cache */ function clean_user_cache( $user ) { + global $current_user; + if ( is_numeric( $user ) ) { $user = new WP_User( $user ); } @@ -1587,6 +1592,13 @@ function clean_user_cache( $user ) { * @param WP_User $user User object. */ do_action( 'clean_user_cache', $user->ID, $user ); + + // Refresh the global user instance if the cleaning current user. + if ( get_current_user_id() === (int) $user->ID ) { + $user_id = (int) $user->ID; + $current_user = null; + wp_set_current_user( $user_id, '' ); + } } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index 92cb658bfc..0ff51e396d 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.8-alpha-50789'; +$wp_version = '5.8-alpha-50790'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.