WordPress.org

Make WordPress Core

Ticket #41936: 41936.3.diff

File 41936.3.diff, 6.0 KB (added by spacedmonkey, 3 years ago)
  • src/wp-includes/class-wp-network.php

     
    150150                        case 'blog_id':
    151151                                return $this->get_main_site_id();
    152152                        case 'site_id':
    153                                 return (int) $this->get_main_site_id();
     153                                return (string) $this->get_main_site_id();
    154154                }
    155155
    156156                return null;
     
    208208         * properties.
    209209         *
    210210         * @since 4.9.0
    211          * @see get_main_site_id()
    212211         *
    213212         * @return string Main site ID as numeric string, for compatibility reasons.
    214213         */
    215         private function get_main_site_id() {
    216                 if ( empty( $this->blog_id ) ) {
    217                         $this->blog_id = (string) get_main_site_id( $this->id );
     214        public function get_main_site_id() {
     215                /**
     216                 * Filters the main site ID.
     217                 *
     218                 * Returning anything other than null will effectively short-circuit the function, returning
     219                 * the result parsed as an integer immediately.
     220                 *
     221                 * @since 4.9.0
     222                 *
     223                 * @param int|null $main_site_id If anything other than null is returned, it is interpreted as the main site ID.
     224                 * @param int $this_id The ID of the network for which the main site was detected.
     225                 */
     226                $main_site_id = apply_filters( 'pre_get_main_site_id', null, $this->id );
     227                if ( null !== $main_site_id ) {
     228                        $this->blog_id = (int) $main_site_id;
    218229                }
     230                if ( ! empty( $this->blog_id ) ) {
     231                        return $this->blog_id;
     232                }
    219233
     234                if ( ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) && $this->domain === DOMAIN_CURRENT_SITE && $this->path === PATH_CURRENT_SITE )
     235                     || ( defined( 'SITE_ID_CURRENT_SITE' ) && $this->id == SITE_ID_CURRENT_SITE ) ) {
     236                        if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) {
     237                                $this->blog_id = (int) BLOG_ID_CURRENT_SITE;
     238
     239                                return $this->blog_id;
     240                        } elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated.
     241                                $this->blog_id = (int) BLOGID_CURRENT_SITE;
     242
     243                                return $this->blog_id;
     244                        }
     245                }
     246
     247                $site = get_site();
     248                if ( $site->domain === $this->domain && $site->path === $this->path ) {
     249                        $main_site_id = $site->id;
     250                } else {
     251                        $main_site_id = wp_cache_get( 'network:' . $this->id . ':main_site', 'site-options' );
     252                        if ( false === $main_site_id ) {
     253                                $_sites       = get_sites( array(
     254                                        'fields'     => 'ids',
     255                                        'number'     => 1,
     256                                        'domain'     => $this->domain,
     257                                        'path'       => $this->path,
     258                                        'network_id' => $this->id,
     259                                ) );
     260                                $main_site_id = ! empty( $_sites ) ? array_shift( $_sites ) : 0;
     261
     262                                wp_cache_add( 'network:' . $this->id . ':main_site', $main_site_id, 'site-options' );
     263                        }
     264                }
     265
     266                $this->blog_id = (int) $main_site_id;
     267
     268
    220269                return $this->blog_id;
    221270        }
    222271
  • src/wp-includes/functions.php

     
    44084408        }
    44094409
    44104410        $site_id = (int) $site_id;
    4411 
    4412         return $site_id === get_main_site_id( $network_id );
     4411//var_dump($site_id,get_network( $network_id )->site_id, "");
     4412        return $site_id === get_network( $network_id )->site_id;
    44134413}
    44144414
    44154415/**
     
    44234423 */
    44244424function get_main_site_id( $network_id = null ) {
    44254425        if ( ! is_multisite() ) {
    4426                 return 1;
     4426                return get_current_blog_id();
    44274427        }
    44284428
    44294429        $network = get_network( $network_id );
     
    44314431                return 0;
    44324432        }
    44334433
    4434         /**
    4435          * Filters the main site ID.
    4436          *
    4437          * Returning anything other than null will effectively short-circuit the function, returning
    4438          * the result parsed as an integer immediately.
    4439          *
    4440          * @since 4.9.0
    4441          *
    4442          * @param int|null $main_site_id If anything other than null is returned, it is interpreted as the main site ID.
    4443          * @param int $network_id The ID of the network for which the main site was detected.
    4444          */
    4445         $main_site_id = apply_filters( 'pre_get_main_site_id', null, $network->id );
    4446         if ( null !== $main_site_id ) {
    4447                 return (int) $main_site_id;
    4448         }
    4449 
    4450         if ( ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) && $network->domain === DOMAIN_CURRENT_SITE && $network->path === PATH_CURRENT_SITE )
    4451              || ( defined( 'SITE_ID_CURRENT_SITE' ) && $network->id == SITE_ID_CURRENT_SITE ) ) {
    4452                 if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) {
    4453                         return BLOG_ID_CURRENT_SITE;
    4454                 } elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated.
    4455                         return BLOGID_CURRENT_SITE;
    4456                 }
    4457         }
    4458 
    4459         $site = get_site();
    4460         if ( $site->domain === $network->domain && $site->path === $network->path ) {
    4461                 $main_site_id = (int) $site->id;
    4462         } else {
    4463                 $main_site_id = wp_cache_get( 'network:' . $network->id . ':main_site', 'site-options' );
    4464                 if ( false === $main_site_id ) {
    4465                         $_sites = get_sites( array(
    4466                                 'fields'     => 'ids',
    4467                                 'number'     => 1,
    4468                                 'domain'     => $network->domain,
    4469                                 'path'       => $network->path,
    4470                                 'network_id' => $network->id,
    4471                         ) );
    4472                         $main_site_id = ! empty( $_sites ) ? array_shift( $_sites ) : 0;
    4473 
    4474                         wp_cache_add( 'network:' . $network->id . ':main_site', $main_site_id, 'site-options' );
    4475                 }
    4476         }
    4477 
    4478         return (int) $main_site_id;
     4434        return $network->site_id;
    44794435}
    44804436
    44814437/**
  • src/wp-includes/ms-load.php

     
    422422        }
    423423
    424424        // Figure out the current network's main site.
    425         if ( empty( $current_site->blog_id ) ) {
    426                 $current_site->blog_id = get_main_site_id( $current_site->id );
    427         }
     425        $current_site->get_main_site_id();
    428426
    429427        return true;
    430428}
  • tests/phpunit/tests/multisite/site.php

     
    1414        protected static $site_ids;
    1515
    1616        function setUp() {
    17                 global $wpdb;
     17                global $wpdb, $current_site;
    1818                parent::setUp();
    1919                $this->suppress = $wpdb->suppress_errors();
     20                $current_site->site_id = 0;
     21                $current_site->blog_id = 0;
    2022        }
    2123
    2224        function tearDown() {