似乎无法使set_blog_id工作,它只是不重置博客ID

时间:2012-02-15 作者:Dains

我试图遍历一系列站点,但似乎无法使set\\u blog\\u id正常工作。以下是示例输出:

数组([0]=>stdClass对象([blog\\u id]=>2)[1]=>stdClass对象([blog\\u id]=>3)[2]=>stdClass对象([blog\\u id]=>5))

从数组中获取新的\\u blog\\u id并检查值-blog\\u id=2

当前日志=5

使用set\\u blog\\u id将当前blog\\u id设置为new\\u blog\\u id

设置\\u blog\\u id后,get\\u current\\u blog\\u id=5-应为2

重置为oldblog get\\u current\\u blog\\u id 5后

正如您所看到的,除了set\\u blog\\u id之外,一切都正常。下面是代码。任何帮助都将不胜感激!

function return_blog_first_posts(){
global $wpdb;

$site_blog_ids = $wpdb->get_results($wpdb->prepare("SELECT blog_id FROM wp_blogs where blog_id > 1")); /* get all subsite blog ids */
print_r($site_blog_ids); /*output check - "Array ( [0] => stdClass Object ( [blog_id] => 2 ) [1] => stdClass Object ( [blog_id] => 3 ) [2] => stdClass Object ( [blog_id] => 5 ) ) "
echo "</br>"; */

foreach( $site_blog_ids as $blog_id ) { /* iterate through the ids */
print_r( "</br>new blog_id check - blog_id= ".$blog_id->blog_id ); /* output check - this shows blog id */

echo "</br>current_blog= ".get_current_blog_id();
$newblogid = $blog_id->blog_id; //
$oldblog = $wpdb->set_blog_id( $newblogid ); // this is not working
echo "</br> after set_blog_id, get_current_blog_id= ".get_current_blog_id();
}
/* Tell the $wpdb object to go back to using the current site */
$wpdb->set_blog_id( $oldblog );
echo "</br> after resetting to oldblog get_current_blog_id ".get_current_blog_id();
}
return_blog_first_posts();

1 个回复
最合适的回答,由SO网友:fuxia 整理而成

使用switch_to_blog( $new_blog_id ) 相反

您可以在中找到函数wp-includes/ms-blogs.php.

更新

$wpdb->set_blog_id() 不更改全局变量$blog_id 由返回get_current_blog_id(). switch_to_blog() 更改全局变量。

结束

相关推荐

帮助解决使用ECHO DO_SHORT代码时的t_ECHO php错误

我正在我的网站上成功地使用轨道滑块插件。插件支持自己的类别。我想在我的页面中嵌入滑块。php模板,但允许每个页面根据类别有自己的滑块。在我的页面内。php我有:<?php echo do_shortcode(\'[orbit-slider category=\"page\"]\'); ?>类别“页面”只是我创建的类别的名称。它将只显示来自类别的幻灯片。我不想硬编码类别,而是想使用自定义字段,以便在每个单独的页面上,我的客户可以指定要显示的类别。我尝试过类似的操作,但它导致了内部服务器错误:&l