WordPress.org

Make WordPress Core


Ignore:
Timestamp:
02/13/2010 11:09:54 PM (12 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

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.