WordPress как на ладони
Дешевый WordPress пакет для разработки Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

restore_current_blog() WP MU

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

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

Заметки

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

При вызове 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();

Примеры

#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();

Заметки

Код restore_current_blog: wp-includes/ms-blogs.php VER 4.9.8

<?php
function restore_current_blog() {
	global $wpdb;

	if ( empty( $GLOBALS['_wp_switched_stack'] ) ) {
		return false;
	}

	$blog = array_pop( $GLOBALS['_wp_switched_stack'] );
	$blog_id = get_current_blog_id();

	if ( $blog_id == $blog ) {
		/** This filter is documented in wp-includes/ms-blogs.php */
		do_action( 'switch_blog', $blog, $blog );
		// 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( $blog );
	$prev_blog_id = $blog_id;
	$GLOBALS['blog_id'] = $blog;
	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();

	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
		wp_cache_switch_to_blog( $blog );
	} 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( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details' ) );
			}
			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) );
		}
	}

	/** This filter is documented in wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $blog, $prev_blog_id );

	// If we still have items in the switched stack, consider ourselves still 'switched'
	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

	return true;
}

Cвязанные функции

Из раздела: Мультисайт

Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться