WordPress.org

Make WordPress Core

Ticket #21434: 21434.2.diff

File 21434.2.diff, 7.9 KB (added by ryan, 7 years ago)
  • wp-includes/ms-blogs.php

     
    487487                        $current_user->for_blog( $blog_id );
    488488        }
    489489
    490         if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    491                 $global_groups = $wp_object_cache->global_groups;
    492         else
    493                 $global_groups = false;
    494 
    495         wp_cache_init();
    496         if ( function_exists('wp_cache_add_global_groups') ) {
    497                 if ( is_array( $global_groups ) )
    498                         wp_cache_add_global_groups( $global_groups );
     490        if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
     491                wp_cache_switch_to_blog( $blog_id );
     492        } else {
     493                if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
     494                        $global_groups = $wp_object_cache->global_groups;
    499495                else
    500                         wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
    501                 wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     496                        $global_groups = false;
     497       
     498                wp_cache_init();
     499                if ( function_exists('wp_cache_add_global_groups') ) {
     500                        if ( is_array( $global_groups ) )
     501                                wp_cache_add_global_groups( $global_groups );
     502                        else
     503                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
     504                        wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     505                }
    502506        }
    503507
    504508        do_action('switch_blog', $blog_id, $prev_blog_id);
     
    551555                        $current_user->for_blog( $blog_id );
    552556        }
    553557
    554         if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
    555                 $global_groups = $wp_object_cache->global_groups;
    556         else
    557                 $global_groups = false;
    558 
    559         wp_cache_init();
    560         if ( function_exists('wp_cache_add_global_groups') ) {
    561                 if ( is_array( $global_groups ) )
    562                         wp_cache_add_global_groups( $global_groups );
     558        if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
     559                wp_cache_switch_to_blog( $blog_id );
     560        } else {
     561                if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) )
     562                        $global_groups = $wp_object_cache->global_groups;
    563563                else
    564                         wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
    565                 wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     564                        $global_groups = false;
     565       
     566                wp_cache_init();
     567                if ( function_exists('wp_cache_add_global_groups') ) {
     568                        if ( is_array( $global_groups ) )
     569                                wp_cache_add_global_groups( $global_groups );
     570                        else
     571                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts' ) );
     572                        wp_cache_add_non_persistent_groups(array( 'comment', 'counts', 'plugins' ));
     573                }
    566574        }
    567575
    568576        do_action('switch_blog', $blog_id, $prev_blog_id);
  • wp-includes/cache.php

     
    180180}
    181181
    182182/**
     183 * Switch the interal blog id.
     184 *
     185 * This changes the blog id used to create keys in blog specific groups.
     186 *
     187 * @param int $blog_id Blog ID
     188 */
     189function wp_cache_switch_to_blog( $blog_id ) {
     190        global $wp_object_cache;
     191
     192        return $wp_object_cache->switch_to_blog( $blog_id );
     193}
     194
     195/**
    183196 * Adds a group or set of groups to the list of global groups.
    184197 *
    185198 * @since 2.6.0
     
    189202function wp_cache_add_global_groups( $groups ) {
    190203        global $wp_object_cache;
    191204
    192         return $wp_object_cache->add_global_groups($groups);
     205        return $wp_object_cache->add_global_groups( $groups );
    193206}
    194207
    195208/**
     
    271284        var $global_groups = array();
    272285
    273286        /**
     287         * The blog prefix to prepend to keys in non-global groups.
     288         *
     289         * @var int
     290         * @access private
     291         * @since 3.5.0
     292         */
     293        var $blog_prefix;
     294
     295        /**
    274296         * Adds data to the cache if it doesn't already exist.
    275297         *
    276298         * @uses WP_Object_Cache::_exists Checks to see if the cache already has data.
     
    292314                if ( empty( $group ) )
    293315                        $group = 'default';
    294316
    295                 if ( $this->_exists($key, $group) )
     317                $id = $this->key( $key, $group );
     318
     319                if ( $this->_exists( $id, $group ) )
    296320                        return false;
    297321
    298322                return $this->set($key, $data, $group, $expire);
     
    325349        function decr( $key, $offset = 1, $group = 'default' ) {
    326350                if ( empty( $group ) )
    327351                        $group = 'default';
    328                
     352
     353                $key = $this->key( $key, $group );
     354
    329355                if ( ! $this->_exists( $key, $group ) )
    330356                        return false;
    331357
     
    361387                if ( empty( $group ) )
    362388                        $group = 'default';
    363389
     390                $key = $this->key( $key, $group );
     391
    364392                if ( ! $force && ! $this->_exists( $key, $group ) )
    365393                        return false;
    366394
     
    402430                if ( empty( $group ) )
    403431                        $group = 'default';
    404432
     433                $key = $this->key( $key, $group );
     434
    405435                if ( $this->_exists( $key, $group ) ) {
    406436                        $found = true;
    407437                        $this->cache_hits += 1;
     
    430460                if ( empty( $group ) )
    431461                        $group = 'default';
    432462
     463                $key = $this->key( $key, $group );
     464
    433465                if ( ! $this->_exists( $key, $group ) )
    434466                        return false;
    435467
     
    447479        }
    448480
    449481        /**
     482         * Create a key from a key and group
     483         *
     484         * @since 3.5.0
     485         *
     486         * @param string $key A cache key
     487         * @param string $group A group
     488         * @return string A key for an individual cache bucket
     489         */
     490        function key( $key, $group ) { 
     491                if ( empty( $group ) )
     492                        $group = 'default';
     493
     494                if ( false !== array_search( $group, $this->global_groups ) )
     495                        $prefix = '';
     496                else
     497                        $prefix = $this->blog_prefix;
     498
     499                return "$prefix$key";
     500        }
     501
     502        /**
    450503         * Replace the contents in the cache, if contents already exist
    451504         *
    452505         * @since 2.0.0
     
    458511         * @param int $expire When to expire the cache contents
    459512         * @return bool False if not exists, true if contents were replaced
    460513         */
    461         function replace($key, $data, $group = 'default', $expire = '') {
     514        function replace( $key, $data, $group = 'default', $expire = '' ) {
    462515                if ( empty( $group ) )
    463516                        $group = 'default';
    464517
    465                 if ( ! $this->_exists( $key, $group ) )
     518                $id = $this->key( $key, $group );
     519
     520                if ( ! $this->_exists( $id, $group ) )
    466521                        return false;
    467522
    468                 return $this->set($key, $data, $group, $expire);
     523                return $this->set( $key, $data, $group, $expire );
    469524        }
    470525
    471526        /**
     
    475530         */
    476531        function reset() {
    477532                // Clear out non-global caches since the blog ID has changed.
    478                 foreach ( array_keys($this->cache) as $group ) {
    479                         if ( !in_array($group, $this->global_groups) )
    480                                 unset($this->cache[$group]);
     533                foreach ( array_keys( $this->cache ) as $group ) {
     534                        if ( !in_array( $group, $this->global_groups ) )
     535                                unset( $this->cache[$group] );
    481536                }
    482537        }
    483538
     
    505560                if ( empty( $group ) )
    506561                        $group = 'default';
    507562
    508                 if ( is_object($data) )
     563                $key = $this->key( $key, $group );
     564
     565                if ( is_object( $data ) )
    509566                        $data = clone $data;
    510567
    511568                $this->cache[$group][$key] = $data;
     
    533590        }
    534591
    535592        /**
     593         * Switch the interal blog id.
     594         *
     595         * This changes the blog id used to create keys in blog specific groups.
     596         *
     597         * @param int $blog_id Blog ID
     598         */
     599        function switch_to_blog( $blog_id ) {
     600                $blog_id = (int) $blog_id;
     601                $this->blog_prefix = is_multisite() ? $blog_id . ':' : '';
     602        }
     603
     604        /**
    536605         * Utility function to determine whether a key exists in the cache.
    537606         *
    538607         * @since 3.4.0
     
    550619         * @return null|WP_Object_Cache If cache is disabled, returns null.
    551620         */
    552621        function __construct() {
     622                global $blog_id;
     623
     624                $this->blog_prefix = is_multisite() ? $blog_id . ':' : '';
     625
    553626                /**
    554627                 * @todo This should be moved to the PHP4 style constructor, PHP5
    555628                 * already calls __destruct()
    556629                 */
    557                 register_shutdown_function(array(&$this, "__destruct"));
     630                register_shutdown_function( array( &$this, "__destruct" ) );
    558631        }
    559632
    560633        /**