restore_current_blog() WP 3.0.0

Повертає глобальні змінні до попереднього стану, після перемикання на інший сайт за допомогою 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();

Приклади

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
  • Global. WP_Object_Cache. $wp_object_cache

список змін

З версії 3.0.0Введено.

Код restore_current_blog() WP 6.0.2

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 ) {
		/** Цей filter is documented в wp-includes/ms-blogs.php */
		do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore');

		// Якщо ми повинні мати елементи у переміщеному стані, визнайте, що ми самі зазнаємо 'перемикання'.
		$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( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-ta ', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details', 'blog_meta')));
			}

			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) );
		}
	}

	/** Цей filter is documented в wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore');

	// Якщо ми повинні мати елементи у переміщеному стані, визнайте, що ми самі зазнаємо 'перемикання'.
	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

	return true;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *