Ticket #29684: 29684.8.diff
File 29684.8.diff, 6.3 KB (added by , 7 years ago) |
---|
-
src/wp-includes/class-wp-network.php
148 148 case 'id': 149 149 return (int) $this->id; 150 150 case 'blog_id': 151 return $this-> blog_id;151 return $this->get_main_site_id(); 152 152 case 'site_id': 153 return (int) $this-> blog_id;153 return (int) $this->get_main_site_id(); 154 154 } 155 155 156 156 return null; … … 202 202 } 203 203 204 204 /** 205 * Returns the main site ID for the network. 206 * 207 * Internal method used by the magic getter for the 'blog_id' and 208 * 'site_id' properties. 209 * 210 * @since 4.9.0 211 * 212 * @return string|int Main site ID as numeric string or integer. 213 */ 214 private function get_main_site_id() { 215 if ( empty( $this->blog_id ) ) { 216 $this->blog_id = get_main_site_id( $this->id ); 217 } 218 219 return $this->blog_id; 220 } 221 222 /** 205 223 * Set the site name assigned to the network if one has not been populated. 206 224 * 207 225 * @since 4.4.0 -
src/wp-includes/functions.php
4392 4392 * Determine whether a site is the main site of the current network. 4393 4393 * 4394 4394 * @since 3.0.0 4395 * @since 4.9.0 The $network_id parameter has been added. 4395 4396 * 4396 * @param int $site_id Optional. Site ID to test. Defaults to current site. 4397 * @param int $site_id Optional. Site ID to test. Defaults to current site. 4398 * @param int $network_id Optional. Network ID of the network to check for. 4399 * Defaults to current network. 4397 4400 * @return bool True if $site_id is the main site of the network, or if not 4398 4401 * running Multisite. 4399 4402 */ 4400 function is_main_site( $site_id = null ) {4401 if ( ! is_multisite() ) 4403 function is_main_site( $site_id = null, $network_id = null ) { 4404 if ( ! is_multisite() ) { 4402 4405 return true; 4406 } 4403 4407 4404 if ( ! $site_id ) 4408 if ( ! $site_id ) { 4405 4409 $site_id = get_current_blog_id(); 4410 } 4406 4411 4407 return (int) $site_id === (int) get_network()->site_id; 4412 $site_id = (int) $site_id; 4413 4414 return $site_id === get_main_site_id( $network_id ); 4415 } 4416 4417 /** 4418 * Gets the main site ID. 4419 * 4420 * @since 4.9.0 4421 * 4422 * @param int $network_id Optional. The ID of the network for which to get the main site. 4423 * Defaults to the current network. 4424 * @return int The ID of the main site. 4425 */ 4426 function get_main_site_id( $network_id = null ) { 4427 if ( ! is_multisite() ) { 4428 return 1; 4429 } 4430 4431 $main_site_id = apply_filters( 'get_main_site_id', null, $network_id ); 4432 if ( null !== $main_site_id ) { 4433 return (int) $main_site_id; 4434 } 4435 4436 $network = get_network( $network_id ); 4437 if ( ! $network ) { 4438 return 0; 4439 } 4440 4441 if ( !empty( $network->blog_id ) ) { 4442 return $network->blog_id; 4443 } 4444 4445 if ( ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) && $network->domain === DOMAIN_CURRENT_SITE && $network->path === PATH_CURRENT_SITE ) 4446 || ( defined( 'SITE_ID_CURRENT_SITE' ) && $network->id == SITE_ID_CURRENT_SITE ) ) { 4447 if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) { 4448 return BLOG_ID_CURRENT_SITE; 4449 } elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated. 4450 return BLOGID_CURRENT_SITE; 4451 } 4452 } 4453 4454 $site = get_site(); 4455 if ( $site->domain === $network->domain && $site->path === $network->path ) { 4456 $main_site_id = (int) $site->id; 4457 } else { 4458 $main_site_id = wp_cache_get( 'network:' . $network->id . ':main_site', 'site-options' ); 4459 if ( false === $main_site_id ) { 4460 $_sites = get_sites( array( 4461 'fields' => 'ids', 4462 'number' => 1, 4463 'domain' => $network->domain, 4464 'path' => $network->path, 4465 'network_id' => $network->id, 4466 ) ); 4467 $main_site_id = ! empty( $_sites ) ? array_shift( $_sites ) : 0; 4468 4469 wp_cache_add( 'network:' . $network->id . ':main_site', $main_site_id, 'site-options' ); 4470 } 4471 } 4472 4473 $main_site_id = (int) $main_site_id; 4474 4475 /** 4476 * Filters the main site ID. 4477 * 4478 * @since 4.9.0 4479 * 4480 * @param int $main_site_id The ID of the main site. 4481 * @param int $network_id The ID of the network for which the main site was detected. 4482 */ 4483 return $main_site_id; 4408 4484 } 4409 4485 4410 4486 /** -
src/wp-includes/ms-load.php
135 135 136 136 /** 137 137 * Retrieves the closest matching site object by its domain and path. 138 * 138 * 139 139 * This will not necessarily return an exact match for a domain and path. Instead, it 140 140 * breaks the domain and path into pieces that are then used to match the closest 141 141 * possibility from a query. … … 424 424 425 425 // Figure out the current network's main site. 426 426 if ( empty( $current_site->blog_id ) ) { 427 if ( $current_blog->domain === $current_site->domain && $current_blog->path === $current_site->path ) { 428 $current_site->blog_id = $current_blog->blog_id; 429 } elseif ( ! $current_site->blog_id = wp_cache_get( 'network:' . $current_site->id . ':main_site', 'site-options' ) ) { 430 $current_site->blog_id = $wpdb->get_var( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE domain = %s AND path = %s", 431 $current_site->domain, $current_site->path ) ); 432 wp_cache_add( 'network:' . $current_site->id . ':main_site', $current_site->blog_id, 'site-options' ); 433 } 427 $current_site->blog_id = get_main_site_id( $current_site->id ); 434 428 } 435 429 436 430 return true; -
tests/phpunit/tests/multisite/site.php
741 741 restore_current_blog(); 742 742 } 743 743 744 /** 745 * @ticket 29684 746 */ 747 function test_is_main_site_different_network() { 748 $args = array( 749 'domain' => 'wordpress.org', 750 'path' => '/', 751 ); 752 753 $network_id = self::factory()->network->create( $args ); 754 755 $args['site_id'] = $network_id; 756 757 $site_id = self::factory()->blog->create( $args ); 758 $other_site_id = self::factory()->blog->create( array_merge( $args, array( 759 'path' => '/foo/', 760 ) ) ); 761 762 $this->assertTrue( is_main_site( $site_id, $network_id ) ); 763 } 764 744 765 function test_switch_upload_dir() { 745 766 $this->assertTrue( is_main_site() ); 746 767