我想在我的站点中创建一个菜单组件,显示指向网络中不同站点的链接(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 );
}
有人能帮我吗,或者给我指出一个不同的解决方案来实现我的目标?
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的迈克尔·贝克维思。