WordPress как на ладони
wordpress jino

restore_current_blog() WP MU

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

✈ 1 раз = 0.001188с = очень медленно | 50000 раз = 3.68с = быстро
Хуки из функции:
Возвращает

Логические: 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() нужно вызывать после каждого использования 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;

Код restore current blog: wp-includes/ms-blogs.php WP 4.8.2

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

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

	if ( did_action( 'init' ) ) {
		$wp_roles = new WP_Roles();
		$current_user = wp_get_current_user();
		$current_user->for_blog( $blog );
	}

	/** 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вязанные функции

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

restore_current_blog Комментариев нет

Здравствуйте, !

Ваш комментарий