restore_current_blog()缓存当前博客的信息(多站点)

目录

描述

Restore the current blog, after calling switch_to_blog().

restore_current_blog() 描述

用法

<?php restore_current_blog() ?>

restore_current_blog() 用法

参数

This function does not accept any parameters

restore_current_blog() 参数

返回值

(boolean

True on success, False if we're already on the current blog

restore_current_blog() 返回值

示例

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */

switch_to_blog( 5 );

/* Do stuff */

restore_current_blog();

restore_current_blog() 示例

注意

restore_current_blog() should be called after every switch_to_blog(). If not, a global variable which monitors the switching, $GLOBALS['_wp_switched_stack'], will not be empty even if you use switch_to_blog() to return to the original blog. If $GLOBALS['_wp_switched_stack'] is not empty, WP will think it is in a switched state and can potentially return the wrong URL for the site via wp_upload_dir(). See http://wordpress.stackexchange.com/a/123516/27757

When calling switch_to_blog() repeatedly, either call restore_current_blog() each time, or save the original blog ID until the end and call switch_to_blog() with that and do:

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
$GLOBALS['_wp_switched_stack'] = array();
$GLOBALS['switched'] = false;

The former is probably preferable, as it is not a hack.

restore_current_blog() 注意

历史

添加于 版本: 3.0.0

restore_current_blog() 历史

源文件

restore_current_blog() 函数的代码位于 wp-includes/ms-blogs.php

/* ----------------------------------
 * wordpress之魂 © http://wphun.com
 * ---------------------------------- */
/**
 * Restore the current blog, after calling switch_to_blog()
 *
 * @see switch_to_blog()
 * @since MU
 *
 * @global wpdb            $wpdb
 * @global array           $_wp_switched_stack
 * @global int             $blog_id
 * @global bool            $switched
 * @global string          $table_prefix
 * @global WP_Object_Cache $wp_object_cache
 *
 * @return bool True on success, false if we're already on the current blog
 */
function restore_current_blog() {
	global $wpdb;

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

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

	if ( $GLOBALS['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 = $GLOBALS['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', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache' ) );
			}
			wp_cache_add_non_persistent_groups( array( 'comment', 'counts', 'plugins' ) );
		}
	}

	if ( did_action( 'init' ) ) {
		wp_roles()->reinit();
		$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;
}

restore_current_blog() 源文件

相关