WordPress.org

Make WordPress Core

Changeset 13126


Ignore:
Timestamp:
02/13/10 23:09:54 (4 years ago)
Author:
ryan
Message:

Add ability to query by domain and/or path to get_blog_details(). Improve blog details caching. Use get_blog_details() in ms-settings.php so queries are cached. see #11644

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/blogs.php

    r13125 r13126  
    7575 * 
    7676 * @since 3.0 
    77  * @param int $blog_id Blog ID 
     77 * @param int|string|array $fields A blog ID, a blog name, or an array of fields to query against. 
    7878 * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. Default is true. 
    7979 * @return object Blog details. 
    8080 */ 
    81 function get_blog_details( $blog_id, $get_all = true ) { 
    82     global $wpdb; 
    83  
    84     if ( !is_numeric( $blog_id ) ) 
    85         $blog_id = get_id_from_blogname( $blog_id ); 
     81function get_blog_details( $fields, $get_all = true ) { 
     82    global $wpdb; 
     83 
     84    if ( is_array($fields ) ) { 
     85        if ( isset($fields['blog_id']) ) { 
     86            $blog_id = $fields['blog_id']; 
     87        } elseif ( isset($fields['domain']) && isset($fields['path']) ) { 
     88            $key = md5( $fields['domain'] . $fields['path'] ); 
     89            $blog = wp_cache_get($key, 'blog-lookup'); 
     90            if ( false !== $blog ) 
     91                return $blog; 
     92            $blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $fields['domain'], $fields['path'] ) ); 
     93            if ( $blog ) { 
     94                wp_cache_set($blog->blog_id . 'short', $blog, 'blog-details'); 
     95                $blog_id = $blog->blog_id; 
     96            } else { 
     97                return false; 
     98            } 
     99        } elseif ( isset($fields['domain']) && is_subdomain_install() ) { 
     100            $key = md5( $fields['domain'] ); 
     101            $blog = wp_cache_get($key, 'blog-lookup'); 
     102            if ( false !== $blog ) 
     103                return $blog; 
     104            $blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $fields['domain'] ) ); 
     105            if ( $blog ) { 
     106                wp_cache_set($blog->blog_id . 'short', $blog, 'blog-details'); 
     107                $blog_id = $blog->blog_id; 
     108            } else { 
     109                return false; 
     110            } 
     111        } else { 
     112            return false; 
     113        } 
     114    } else { 
     115        if ( !is_numeric( $fields ) ) 
     116            $blog_id = get_id_from_blogname( $fields ); 
     117        else 
     118            $blog_id = $fields; 
     119    } 
    86120 
    87121    $blog_id = (int) $blog_id; 
     
    101135    } 
    102136 
    103     $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) ); 
    104     if ( ! $details ) { 
    105         wp_cache_set( $blog_id . $all, -1, 'blog-details' ); 
    106         return false; 
     137    // Try the other cache. 
     138    if ( $get_all ) { 
     139        $details = wp_cache_get( $blog_id . 'short', 'blog-details' ); 
     140    } else { 
     141        $details = wp_cache_get( $blog_id, 'blog-details' ); 
     142        // If short was requested and full cache is set, we can return. 
     143        if ( $details ) { 
     144            if ( ! is_object( $details ) ) { 
     145                if ( $details == -1 ) 
     146                    return false; 
     147                else 
     148                    // Clear old pre-serialized objects. Cache clients do better with that. 
     149                    wp_cache_delete( $blog_id . $all, 'blog-details' ); 
     150            } 
     151            return $details; 
     152        } 
     153    } 
     154 
     155    if ( !$details ) { 
     156        $details = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE blog_id = %d", $blog_id ) ); 
     157        if ( ! $details ) { 
     158            // Set the full cache. 
     159            wp_cache_set( $blog_id, -1, 'blog-details' ); 
     160            return false; 
     161        } 
    107162    } 
    108163 
  • trunk/wp-includes/ms-settings.php

    r13065 r13126  
    4949    $current_blog = wp_cache_get( 'current_blog_' . $domain, 'site-options' ); 
    5050    if ( !$current_blog ) { 
    51         $current_blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $domain ) ); 
     51        $current_blog = get_blog_details( array('domain' => $domain), false ); 
    5252        if ( $current_blog ) 
    5353            wp_cache_set( 'current_blog_' . $domain, $current_blog, 'site-options' ); 
     
    6868    $current_blog = wp_cache_get( 'current_blog_' . $domain . $path, 'site-options' ); 
    6969    if ( ! $current_blog ) { 
    70         $current_blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $domain, $path ) ); 
     70        $current_blog = $current_blog = get_blog_details( array('domain' => $domain, 'path' => $path ), false ); 
    7171        if ( $current_blog ) 
    7272            wp_cache_set( 'current_blog_' . $domain . $path, $current_blog, 'site-options' ); 
     
    9292            exit; 
    9393        } 
    94         $current_blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $current_site->domain, $current_site->path ) ); 
     94        $current_blog = get_blog_details( array('domain' => $current_site->domain, 'path' => $current_site->path), false ); 
    9595    } 
    9696    if ( ! $current_blog || ! $current_site ) 
  • trunk/wp-settings.php

    r13125 r13126  
    6060wp_set_lang_dir(); 
    6161 
    62 // Include early WordPress files. 
     62// Load early WordPress files. 
    6363require( ABSPATH . WPINC . '/compat.php' ); 
    6464require( ABSPATH . WPINC . '/functions.php' ); 
     
    7373// Start the WordPress object cache, or an external object cache if the drop-in is present. 
    7474wp_start_object_cache(); 
     75 
     76// Load early WordPress files. 
     77require( ABSPATH . WPINC . '/plugin.php' ); 
     78require( ABSPATH . WPINC . '/default-filters.php' ); 
     79include_once( ABSPATH . WPINC . '/pomo/mo.php' ); 
    7580 
    7681// Initialize multisite if enabled. 
     
    7984    require( ABSPATH . WPINC . '/ms-settings.php' ); 
    8085} 
    81  
    82 // Load early WordPress files. 
    83 require( ABSPATH . WPINC . '/plugin.php' ); 
    84 require( ABSPATH . WPINC . '/default-filters.php' ); 
    85 include_once( ABSPATH . WPINC . '/pomo/mo.php' ); 
    8686 
    8787// Stop most of WordPress from being loaded if we just want the basics. 
Note: See TracChangeset for help on using the changeset viewer.