从另一个博客的模板信息访问(在同一网络中)

时间:2014-02-14 作者:Ninj

在我的根博客(1)中,我有一个自定义的帖子类型,可以链接到我网络中的现有博客。它通过在post metas中记录链接到的博客的ID来实现。我使用_blog_id 作为此数据的名称。

在这个根博客的一个页面中,我列出了这些自定义帖子,并轻松检索了我保存的元数据:

<?php while ( have_posts() ) : the_post();
$blog_id = get_post_meta(get_the_id(), \'_blog_id\', true);
现在,我有了我想从中获取信息的博客的ID,所以我尝试以下方法:

switch_to_blog($blog_id);
$blog_url = get_bloginfo(\'url\');
restore_current_blog();
不幸的是,这不起作用,因为$blog_url 具有根博客的URL。

更糟的是:switch_to_blog() 有效但无效restore_current_blog(), 因为对循环函数的后续调用现在在子博客中工作。例如,调用时the_post_thumbnails(), 图片来源为“/上传/站点/2014年2月…”当我在根站点时。

As you could guess, i have two questions:

  1. How to retreive blog info of another blog in the network, from the template of a blog?
  2. Why does switch_to_blog(), followed by restore_current_blog() makes the LOOP functions to behave incorrectly?
1 个回复
最合适的回答,由SO网友:Ninj 整理而成

@帕特·J:谢谢你的回答。作为一名老开发人员,这是我的第一个反射,我禁用了插件,甚至自定义函数。没有任何帮助。我忘了说出来。

But i found the solution, 这很愚蠢,读一下:

$blog_id 在循环中(或通常在模板中)以某种方式使用,因此您永远不应该分配此变量。$blog_id is a reserved variable in template! 现在我会记住;)

所发生的是,通过改变$blog_id\'s值时,后续的助手函数调用在错误的博客上工作,因此使用了错误的上载文件夹。

它还解决了我的第一个问题:network_site_url($sub_blog_id) 根据需要提供一个外国博客的URL。这个$blog_id bug也影响了这种行为。

希望这有帮助!

结束

相关推荐

如何在必用插件中使用is_MultiSite()?

我希望此代码在mu plugins文件夹中的插件中执行。在函数中执行时。php一切正常,但当我在mu插件中尝试它时,会创建一个空白页面。if (( is_multisite() && !current_user_can(\'manage_network\') ) || ( !is_multisite() && !current_user_can(\'create_users\'))) { add_action( \'init\', create_functio