WordPress.org

Make WordPress Core

Ticket #15458: 15458.8.diff

File 15458.8.diff, 2.3 KB (added by SergeyBiryukov, 3 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/**