切换到博客(整数 $新日志id,布尔 $已弃用 = 无效的 ):真的

切换当前日志。

描述

如果您需要从其他博客获取帖子或其他信息,此功能非常有用。之后可以使用切换回来恢复当前日志().

与最初请求的站点一起加载的PHP代码(例如来自插件或主题的代码)不会切换。参见#14941。

另请参见

参数

$新日志id整数必修的
要切换到的日志的ID。默认值:当前日志。
$已弃用布尔可选择的
未使用。

违约:无效的

返回

真的始终返回true。

来源

函数switch_to_blog($new_blog_id,$deprecated=null){全局$wpdb;$prev_blog_id=获取当前日志();if(空($new_blog_id)){$new_blog_id=$prev_blog_ id;}$GLOBALS[“_wp_switched_stack”][]=$prev_blog_id;/**如果我们切换到当前所在的博客id,*设置正确的var,执行相关操作,但跳过*额外的不必要工作*/if($new_blog_id==$prev_blog_ id){/***当博客切换时激发。**@自MU(3.0.0)起*@自5.4.0起添加了`$context`参数。**@param int$new_blog_id新博客id。*@param int$prev_blog_id上一个博客id。*@param string$context附加上下文。从switch_to_blog()调用时接受“switch”*或从restore_current_blog()调用时的“restore”。*/do_action(“switch_blog”,$new_blog_id,$prev_blog_ id,“switch”);$GLOBALS['switched']=true;返回true;}$wpdb->设置日志id($new_blog_id);$GLOBALS['table_prefix']=$wpdb->get_blog_prefix();$GLOBALS['blog_id']=$new_blog_id;if(function_exists('wp_cache_switch_to_blog')){wp_cache_switch_to_blog($new_blog_id);}其他{全局$wp_object_cache;if(is_object($wp_object_cache)&&isset($wp_object_cache->global_groups)){$global_groups=$wp_object_cache->全局组;}其他{$global_groups=false;}wp_cache_init();if(function_exists('wp_cache_add_global_groups')){if(is_array($global_groups)){wp_cache_add_global_groups($全局组);}其他{wp_cache_add_global组(阵列('博客详细信息','博客id缓存',“blog-lookup”,“blog_meta”,“全球帖子”,“网络”,'网络查询',“站点”,'站点详细信息','站点选项','站点查询','站点-瞬态',“主题_文件”,“rss”,“用户”,'用户查询','用户元数据','用户电子邮件','用户登录',“userslugs”,));}wp_cache_add_non_persistent_groups(数组(“counts”、“plugins”、“theme_json”));}}/**该过滤器记录在wp-includes/ms-blogs.php中*/do_action(“switch_blog”,$new_blog_id,$prev_blog_ id,“switch”);$GLOBALS['switched']=true;返回true;}

挂钩

do_操作(“switch_blog”,整数 $新日志id,整数 $prev_blog_id,一串 $上下文 )

切换博客时激发。

变更日志

版本描述
MU(3.0.0)介绍。

用户贡献的笔记

  1. 跳到注释7内容

    多个交换机

    foreach($blog_id作为$blog_ id){switch_to_blog($blog_id);//做一些事情恢复当前日志();}

    如果你不打电话恢复当前日志()每之后switch_to_blog(),WordPress可能会进入一种可能为站点构建错误url的状态。请参见恢复当前日志()switch_to_blog().

  2. 跳到注释8内容

    我有点困惑切换到日志()功能。此功能仅影响网络上正在访问的数据库。我无法访问网络上特定博客中存在的代码块、类、函数或变量。因此,这也意味着我无法访问网络上只存在于一个站点上的主题或插件。在我意识到这仅限于存储在数据库中的站点数据之前,我希望这个功能能有更多的功能。

    以下示例不起作用:

    站点1-->Site1_only_plugin-->Site1_nly_plungin_function()

    也就是说,Site 1有一个独特的插件,它有一些我想在Site 2(或网络上的任何其他地方)访问的功能,而无需将完整插件加载到Site 2。我可能会在站点2中尝试这样做:

    switch_to_blog($site1);$var=站点1_only_plugin_function();恢复当前日志();

    这不起作用。我只能使用switch_to_blog()从网络上的其他站点访问数据库值的功能。下面是一个有效的示例:

    站点1-->站点1_only_plugin-->站点2_only_plugin_function()-->add_option(“站点1_only_plungin_option”,$var)

    Site 1上的插件首先在Site 1数据库中设置了一个值。然后,我可以从网络上的任何位置访问选项表中的该值,如下所示:

    switch_to_blog($site1);$var=获取选项('Site1_only_plugin_option');恢复当前日志();
  3. 跳到注释10内容

    描述

    在switch_to_blog调用后恢复上一个blog。

    与函数的名称相反,这不会恢复原来的博客,而是恢复以前的博客。正在呼叫`切换到日志()`连续两次调用此函数将导致出现在由第一个`switch_to_blog()`呼叫。

  4. 跳到注释11内容

    使用时switch_to_blog()在WordPress之外,您需要拥有全局$已切换定义。用于定义目标博客ID的变量也可能不是$博客id,因为它由WP Core使用。

    下面的示例将在正确的blogid内创建帖子,除非$已切换已定义。

    <?php(电话)要求一次/wp-load.php';全局$switched;$blog_id_target=2;switch_to_blog($blog_id_target);//以编程方式为博客2创建帖子。$id=wp_insert_post(阵列(“post_author”=>1,“post_status”=>“发布”,'post_type'=>'custom_post_type',“post_content”=>“在此处发布正文”,“post_title”=>“此处发布标题”));?>

你必须登录在能够发表注释或反馈之前。