Multisite: Use `get_current_blog_id()` in `get_site()` for current site.

The global `$current_blog` is not switched in `switch_to_blog()` and can
not be used to properly retrieve current switched site information.

See #37607.


git-svn-id: https://develop.svn.wordpress.org/trunk@38217 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jeremy Felt 2016-08-08 22:32:47 +00:00
parent 0bbd0f3a5f
commit 0df4e1f026
2 changed files with 46 additions and 5 deletions

View File

@ -478,15 +478,12 @@ function clean_blog_cache( $blog ) {
* *
* @since 4.6.0 * @since 4.6.0
* *
* @global WP_Site $current_blog The current site.
*
* @param WP_Site|int|null $site Optional. Site to retrieve. Default is the current site. * @param WP_Site|int|null $site Optional. Site to retrieve. Default is the current site.
* @return WP_Site|null The site object or null if not found. * @return WP_Site|null The site object or null if not found.
*/ */
function get_site( &$site = null ) { function get_site( &$site = null ) {
global $current_blog; if ( empty( $site ) ) {
if ( empty( $site ) && isset( $current_blog ) ) { $site = get_current_blog_id();
$site = $current_blog;
} }
if ( $site instanceof WP_Site ) { if ( $site instanceof WP_Site ) {

View File

@ -0,0 +1,44 @@
<?php
if ( is_multisite() ) :
/**
* Test get_site() wrapper of WP_Site in multisite.
*
* @group ms-site
* @group multisite
*/
class Tests_Multisite_Get_Site extends WP_UnitTestCase {
protected static $site_ids;
public static function wpSetUpBeforeClass( $factory ) {
self::$site_ids = array(
'wordpress.org/' => array( 'domain' => 'wordpress.org', 'path' => '/' ),
'wordpress.org/foo/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/' ),
'wordpress.org/foo/bar/' => array( 'domain' => 'wordpress.org', 'path' => '/foo/bar/' ),
);
foreach ( self::$site_ids as &$id ) {
$id = $factory->blog->create( $id );
}
unset( $id );
}
public static function wpTearDownAfterClass() {
foreach( self::$site_ids as $id ) {
wpmu_delete_blog( $id, true );
}
wp_update_network_site_counts();
}
public function test_get_site_in_switched_state_returns_switched_site() {
switch_to_blog( self::$site_ids[ 'wordpress.org/foo/' ] );
$site = get_site();
restore_current_blog();
$this->assertEquals( self::$site_ids[ 'wordpress.org/foo/'], $site->id );
}
}
endif;