restore_current_blog(): bool

Restores the current blog, after calling switch_to_blog() .

Description

See also

Return

bool True on success, false if we’re already on the current blog.

More Information

restore_current_blog() should be called after every switch_to_blog(). If not, a global variable which monitors the switching, $GLOBALS['_wp_switched_stack'], will not be empty even if you use switch_to_blog() to return to the original blog. If $GLOBALS['_wp_switched_stack'] is not empty, WP will think it is in a switched state and can potentially return the wrong URL for the site via wp_upload_dir(). See http://wordpress.stackexchange.com/a/123516/27757

When calling switch_to_blog() repeatedly, either call restore_current_blog() each time, or save the original blog ID until the end and call switch_to_blog() with that and do:

$GLOBALS['_wp_switched_stack'] = array();
$GLOBALS['switched'] = false;

The former is probably preferable, as it is not a hack.

Source

function restore_current_blog() {	global $wpdb;	if ( empty( $GLOBALS['_wp_switched_stack'] ) ) {	return false;	}	$new_blog_id = array_pop( $GLOBALS['_wp_switched_stack'] );	$prev_blog_id = get_current_blog_id();	if ( $new_blog_id === $prev_blog_id ) {	/** This filter is documented in wp-includes/ms-blogs.php */	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );	// If we still have items in the switched stack, consider ourselves still 'switched'.	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );	return true;	}	$wpdb->set_blog_id( $new_blog_id );	$GLOBALS['blog_id'] = $new_blog_id;	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {	wp_cache_switch_to_blog( $new_blog_id );	} else {	global $wp_object_cache;	if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) {	$global_groups = $wp_object_cache->global_groups;	} else {	$global_groups = false;	}	wp_cache_init();	if ( function_exists( 'wp_cache_add_global_groups' ) ) {	if ( is_array( $global_groups ) ) {	wp_cache_add_global_groups( $global_groups );	} else {	wp_cache_add_global_groups(	array(	'blog-details',	'blog-id-cache',	'blog-lookup',	'blog_meta',	'global-posts',	'image_editor',	'networks',	'network-queries',	'sites',	'site-details',	'site-options',	'site-queries',	'site-transient',	'theme_files',	'rss',	'users',	'user-queries',	'user_meta',	'useremail',	'userlogins',	'userslugs',	)	);	}	wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );	}	}	/** This filter is documented in wp-includes/ms-blogs.php */	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );	// If we still have items in the switched stack, consider ourselves still 'switched'.	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );	return true; } 

Hooks

do_action( ‘switch_blog’, int $new_blog_id, int $prev_blog_id, string $context )

Fires when the blog is switched.

Changelog

VersionDescription
MU (3.0.0)Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.