WordPress.org

Make WordPress Core

Ticket #15458: 15458.9.diff

File 15458.9.diff, 2.2 KB (added by ryan, 7 years ago)

Pull root blog check out of the loop.

  • 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;
    672674
    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' );
    681                 }
     675        $blogs = array();
     676
     677        if ( isset( $userkeys[ $wpdb->base_prefix . 'capabilities' ] ) ) {
     678                $blogs[] = 1;
     679                unset( $userkeys[ $wpdb->base_prefix . 'capabilities' ] );
    682680        }
    683681
    684         if ( false === $blogs ) {
    685                 $userkeys = get_user_meta( (int) $id );
    686                 if ( empty( $userkeys ) )
    687                         return false;
    688                 $userkeys = array_keys( $userkeys );
     682        $userkeys = array_keys( $userkeys );
    689683
    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' );
     684        foreach ( $userkeys as $key ) {
     685                if ( 'capabilities' !== substr( $key, -12 ) )
     686                        continue;
     687                if ( 0 !== strpos( $key, $wpdb->base_prefix ) )
     688                        continue;
     689                $key = str_replace( array( $wpdb->base_prefix, '_capabilities' ), '', $key );
     690                if ( is_numeric( $key ) )
     691                        $blogs[] = (int) $key;
    705692        }
    706693
    707694        $blog_deets = array();
     
    11531140        wp_cache_delete($user->user_login, 'userlogins');
    11541141        wp_cache_delete($user->user_email, 'useremail');
    11551142        wp_cache_delete($user->user_nicename, 'userslugs');
    1156         wp_cache_delete('blogs_of_user-' . $id, 'users');
    11571143}
    11581144
    11591145/**