WordPress.org

Make WordPress Core

Ticket #15458: 15458.8.diff

File 15458.8.diff, 2.3 KB (added by SergeyBiryukov, 7 years ago)
  • wp-includes/user.php

     
    665665        }
    666666
    667667        // Logged out users can't have blogs
    668         if ( 0 === $id )
     668        if ( empty( $id ) )
    669669                return false;
    670670
    671         $blogs = wp_cache_get( 'blogs_of_user-' . $id, 'users' );
     671        $userkeys = get_user_meta( (int) $id );
     672        if ( empty( $userkeys ) )
     673                return false;
     674        $userkeys = array_keys( $userkeys );
    672675
    673         // Try priming the new cache from the old cache
    674         if ( false === $blogs ) {
    675                 $cache_suffix = $all ? '_all' : '_short';
    676                 $blogs = wp_cache_get( 'blogs_of_user_' . $id . $cache_suffix, 'users' );
    677                 if ( is_array( $blogs ) ) {
    678                         $blogs = array_keys( $blogs );
    679                         if ( $all )
    680                                 wp_cache_set( 'blogs_of_user-' . $id, $blogs, 'users' );
     676        $blogs = array();
     677        foreach ( $userkeys as $key ) {
     678                if ( $key === $wpdb->base_prefix . 'capabilities' ) {
     679                        $blogs[] = 1;
     680                        continue;
    681681                }
     682                if ( 'capabilities' !== substr( $key, -12 ) )
     683                        continue;
     684                if ( 0 !== strpos( $key, $wpdb->base_prefix ) )
     685                        continue;
     686                $key = str_replace( array( $wpdb->base_prefix, '_capabilities' ), '', $key );
     687                if ( is_numeric( $key ) )
     688                        $blogs[] = (int) $key;
    682689        }
    683690
    684         if ( false === $blogs ) {
    685                 $userkeys = get_user_meta( (int) $id );
    686                 if ( empty( $userkeys ) )
    687                         return false;
    688                 $userkeys = array_keys( $userkeys );
    689 
    690                 $blogs = $match = array();
    691                 $prefix_length = strlen( $wpdb->base_prefix );
    692                 foreach ( $userkeys as $key ) {
    693                         if ( $prefix_length && substr($key, 0, $prefix_length) != $wpdb->base_prefix )
    694                                 continue;
    695                         if ( substr($key, -12, 12) != 'capabilities' )
    696                                 continue;
    697                         if ( preg_match( '/^' . $wpdb->base_prefix . '((\d+)_)?capabilities$/', $key, $match ) ) {
    698                                 if ( count( $match ) > 2 )
    699                                         $blogs[] = (int) $match[ 2 ];
    700                                 else
    701                                         $blogs[] = 1;
    702                         }
    703                 }
    704                 wp_cache_set( 'blogs_of_user-' . $id, $blogs, 'users' );
    705         }
    706 
    707691        $blog_deets = array();
    708692        foreach ( (array) $blogs as $blog_id ) {
    709693                $blog = get_blog_details( $blog_id );
     
    11531137        wp_cache_delete($user->user_login, 'userlogins');
    11541138        wp_cache_delete($user->user_email, 'useremail');
    11551139        wp_cache_delete($user->user_nicename, 'userslugs');
    1156         wp_cache_delete('blogs_of_user-' . $id, 'users');
    11571140}
    11581141
    11591142/**