如何从每个多站点博客中获取定制元数据?

时间:2015-09-11 作者:dokdeleon

我想在我的站点中创建一个菜单组件,显示指向网络中不同站点的链接(WordPress Multisite)。

我的解决方案是使用CMB2创建site\\u选项。每个站点都将用必要的值填充这些值,然后这些值将用于显示在主题标题上的菜单。php。但是,尽管使用了switch\\u to\\u blog(),但我只获取主/默认站点的site\\u选项数据。

代码如下:

$sites = wp_get_sites();
$current_site = get_current_blog_id();

foreach ($sites as $site) {
  $details = get_blog_details($site[\'blog_id\']);
  $zSite = $details->blog_id;
  $mycolor = \'\';
  $mclass = \'\';

    if( $current_site == $zSite ) {
        $mclass = \'active\';
    }

    switch_to_blog( $site[ \'blog_id\' ] );
        $mycolor = myPrefix_get_option( \'test_colorpicker\' ); //this is the get option function provided by CMB2. See the whole function here: https://github.com/WebDevStudios/CMB2-Snippet-Library/blob/master/options-and-settings-pages/theme-options-cmb.php
    restore_current_blog();

  printf( \'<li role="presentation" class="%s"><a style="border-color:%s" href="%s">%s</a></li>\', $mclass , $mycolor , \'http://\'.$site[\'domain\'].$site[\'path\'], $details->blogname );
}
有人能帮我吗,或者给我指出一个不同的解决方案来实现我的目标?

1 个回复
SO网友:dokdeleon

对于那些在将来偶然发现这一点的人来说,这实际上是由CMB2 作者本人,Michael Beckwith:

$sites = wp_get_sites();
$current_site = get_current_blog_id();

foreach ($sites as $site) {
  $details = get_blog_details($site[\'blog_id\']);
  $zSite = $details->blog_id;
  $mycolor = \'\';
  $mclass = \'\';

    if( $current_site == $zSite ) {
        $mclass = \'active\';
    }

    switch_to_blog( $site[ \'blog_id\' ] );
        $mycolor = get_option( \'myprefix_options\' ); // here\'s the updated code
        $mycolor = $mycolor[\'test_colorpicker\']; // here\'s the updated code
    restore_current_blog();

  printf( \'<li role="presentation" class="%s"><a style="border-color:%s" href="%s">%s</a></li>\', $mclass , $mycolor , \'http://\'.$site[\'domain\'].$site[\'path\'], $details->blogname );
}
据迈克尔说:

我认为问题归根结底是源于myprefix\\u admin()函数。它创建了所谓的单例,这意味着在给定的时间内,一个对象只存在一个实例。它正在立即运行,之后任何时候使用myprefix\\u admin()调用都会引用第一个对象。这包括foreach内部循环,就像上面尝试的那样。

。。。我们所做的只是获取整个选项,然后只提取我们需要的部分,在本例中是颜色选择器值。

再次感谢CMB2的迈克尔·贝克维思。

相关推荐

Remove node from multisites?

我有一个如下所示的功能,其目标是从“我的网站”下拉列表中删除新帖子并管理评论。如果我将{$node\\u id}替换为blogs id,这会很好地工作。但我希望这适用于“我的站点”列表中的所有多站点。这意味着我需要获得所有的博客id。这是我已经取得的成就,但它不起作用。add_action( \'admin_bar_menu\', \'remove_nodes_from_mysites\', 999 ); function remove_nodes_from_mysites( $wp_admin_