restore_current_blog()WP 3.0.0

Возвращает глобальные переменные в прежнее состояние, после переключения на другой сайт с помощью switch_to_blog().

функция перед работой проверяет было ли переключение, если его нет, то ничего не делает. Это значит, что функцию можно вызывать даже если переключения не было, на производительность это не повлияет.

Важно

Функцию нужно вызывать после каждого использования switch_to_blog(). Если этого не сделать, то глобальная переменная: $GLOBALS['_wp_switched_stack'], которая следит за переключением, останется заполненной. WP будет думать, что вы в переключенном состоянии и может возвращать неправильный УРЛ на сайт при использовании - wp_upload_dir(). Это произойдет даже если переключиться на текущий сайт - вызвать switch_to_blog( ID ), где ID - это ID текущего блога.

При вызове switch_to_blog() несколько раз, каждый раз вызывайте restore_current_blog(). Или сохраните ID блога и в конце вызовите switch_to_blog() с этим ID и опустошите глобальные переменные:

$GLOBALS['_wp_switched_stack'] = array();
$GLOBALS['switched'] = false;
1 раз — 0.001188 сек (очень медленно) | 50000 раз — 0.059483 сек (скорость света)
Хуки из функции

Возвращает

true|false. true - при успешном возврате и false - если уже на текущем сайте.

Использование

restore_current_blog();

Примеры

0

#1 Возврат к текущему блогу

Пример показывает как вернуться к текущему блогу после того, как переключились на другой сайт и сделали там все что нужно:

// переключаемся на блог 5
switch_to_blog( 5 );

// Выводим данные блога на который переключились
// Получаем посты с блога 5
$myposts = get_posts();
foreach( $myposts as $post ){
	echo esc_html( $post->post_title ) .'<br>';
}
wp_reset_postdata();

// возвращения к текущему блогу
restore_current_blog();

Заметки

  • Смотрите: switch_to_blog()
  • Global. wpdb. $wpdb WordPress database abstraction object.
  • Global. Массив. $_wp_switched_stack
  • Global. int. $blog_id
  • Global. true|false. $switched
  • Global. Строка. $table_prefix The database table prefix.
  • Global. WP_Object_Cache. $wp_object_cache

Список изменений

С версии 3.0.0 Введена.

Код restore_current_blog() WP 6.7.1

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;
}