diff --git a/wp-includes/class-wp-network.php b/wp-includes/class-wp-network.php index bce09a2f2e..5c326dd740 100644 --- a/wp-includes/class-wp-network.php +++ b/wp-includes/class-wp-network.php @@ -148,9 +148,9 @@ class WP_Network { case 'id': return (int) $this->id; case 'blog_id': - return $this->get_main_site_id(); + return (string) $this->get_main_site_id(); case 'site_id': - return (int) $this->get_main_site_id(); + return $this->get_main_site_id(); } return null; @@ -208,16 +208,68 @@ class WP_Network { * properties. * * @since 4.9.0 - * @see get_main_site_id() * - * @return string Main site ID as numeric string, for compatibility reasons. + * @return int The ID of the main site. */ private function get_main_site_id() { - if ( empty( $this->blog_id ) ) { - $this->blog_id = (string) get_main_site_id( $this->id ); + /** + * Filters the main site ID. + * + * Returning a positive integer will effectively short-circuit the function. + * + * @since 4.9.0 + * + * @param int|null $main_site_id If a positive integer is returned, it is interpreted as the main site ID. + * @param int $network_id The ID of the network for which the main site was detected. + */ + $main_site_id = (int) apply_filters( 'pre_get_main_site_id', null, $this->id ); + if ( 0 < $main_site_id ) { + return $main_site_id; } - return $this->blog_id; + if ( 0 < (int) $this->blog_id ) { + return (int) $this->blog_id; + } + + if ( ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) && $this->domain === DOMAIN_CURRENT_SITE && $this->path === PATH_CURRENT_SITE ) + || ( defined( 'SITE_ID_CURRENT_SITE' ) && $this->id == SITE_ID_CURRENT_SITE ) ) { + if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) { + $this->blog_id = (string) BLOG_ID_CURRENT_SITE; + + return (int) $this->blog_id; + } + + if ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated. + $this->blog_id = (string) BLOGID_CURRENT_SITE; + + return (int) $this->blog_id; + } + } + + $site = get_site(); + if ( $site->domain === $this->domain && $site->path === $this->path ) { + $main_site_id = (int) $site->id; + } else { + $cache_key = 'network:' . $this->id . ':main_site'; + + $main_site_id = wp_cache_get( $cache_key, 'site-options' ); + if ( false === $main_site_id ) { + $_sites = get_sites( array( + 'fields' => 'ids', + 'number' => 1, + 'domain' => $this->domain, + 'path' => $this->path, + 'network_id' => $this->id, + ) ); + $main_site_id = ! empty( $_sites ) ? array_shift( $_sites ) : 0; + + wp_cache_add( $cache_key, $main_site_id, 'site-options' ); + } + } + + $this->blog_id = (string) $main_site_id; + + return (int) $this->blog_id; } /** diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 2720f590af..87eef314ca 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -4431,51 +4431,7 @@ function get_main_site_id( $network_id = null ) { return 0; } - /** - * Filters the main site ID. - * - * Returning anything other than null will effectively short-circuit the function, returning - * the result parsed as an integer immediately. - * - * @since 4.9.0 - * - * @param int|null $main_site_id If anything other than null is returned, it is interpreted as the main site ID. - * @param int $network_id The ID of the network for which the main site was detected. - */ - $main_site_id = apply_filters( 'pre_get_main_site_id', null, $network->id ); - if ( null !== $main_site_id ) { - return (int) $main_site_id; - } - - if ( ( defined( 'DOMAIN_CURRENT_SITE' ) && defined( 'PATH_CURRENT_SITE' ) && $network->domain === DOMAIN_CURRENT_SITE && $network->path === PATH_CURRENT_SITE ) - || ( defined( 'SITE_ID_CURRENT_SITE' ) && $network->id == SITE_ID_CURRENT_SITE ) ) { - if ( defined( 'BLOG_ID_CURRENT_SITE' ) ) { - return BLOG_ID_CURRENT_SITE; - } elseif ( defined( 'BLOGID_CURRENT_SITE' ) ) { // deprecated. - return BLOGID_CURRENT_SITE; - } - } - - $site = get_site(); - if ( $site->domain === $network->domain && $site->path === $network->path ) { - $main_site_id = (int) $site->id; - } else { - $main_site_id = wp_cache_get( 'network:' . $network->id . ':main_site', 'site-options' ); - if ( false === $main_site_id ) { - $_sites = get_sites( array( - 'fields' => 'ids', - 'number' => 1, - 'domain' => $network->domain, - 'path' => $network->path, - 'network_id' => $network->id, - ) ); - $main_site_id = ! empty( $_sites ) ? array_shift( $_sites ) : 0; - - wp_cache_add( 'network:' . $network->id . ':main_site', $main_site_id, 'site-options' ); - } - } - - return (int) $main_site_id; + return $network->site_id; } /** diff --git a/wp-includes/version.php b/wp-includes/version.php index b3f07df52f..d634272de2 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.9-beta2-41860'; +$wp_version = '4.9-beta2-41861'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.