WordPress Version: 6.5
/**
* Switches the current blog.
*
* This function is useful if you need to pull posts, or other information,
* from other blogs. You can switch back afterwards using restore_current_blog().
*
* PHP code loaded with the originally requested site, such as code from a plugin or theme, does not switch. See #14941.
*
* @see restore_current_blog()
* @since MU (3.0.0)
*
* @global wpdb $wpdb WordPress database abstraction object.
* @global int $blog_id
* @global array $_wp_switched_stack
* @global bool $switched
* @global string $table_prefix
* @global WP_Object_Cache $wp_object_cache
*
* @param int $new_blog_id The ID of the blog to switch to. Default: current blog.
* @param bool $deprecated Not used.
* @return true Always returns true.
*/
function switch_to_blog($new_blog_id, $deprecated = null)
{
global $wpdb;
$prev_blog_id = get_current_blog_id();
if (empty($new_blog_id)) {
$new_blog_id = $prev_blog_id;
}
$GLOBALS['_wp_switched_stack'][] = $prev_blog_id;
/*
* If we're switching to the same blog id that we're on,
* set the right vars, do the associated actions, but skip
* the extra unnecessary work
*/
if ($new_blog_id == $prev_blog_id) {
/**
* Fires when the blog is switched.
*
* @since MU (3.0.0)
* @since 5.4.0 The `$context` parameter was added.
*
* @param int $new_blog_id New blog ID.
* @param int $prev_blog_id Previous blog ID.
* @param string $context Additional context. Accepts 'switch' when called from switch_to_blog()
* or 'restore' when called from restore_current_blog().
*/
do_action('switch_blog', $new_blog_id, $prev_blog_id, 'switch');
$GLOBALS['switched'] = true;
return true;
}
$wpdb->set_blog_id($new_blog_id);
$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();
$GLOBALS['blog_id'] = $new_blog_id;
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', '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, 'switch');
$GLOBALS['switched'] = true;
return true;
}