Как получить данные пользовательских метабоксов из каждого блога в мультисайте?
Я хотел создать компонент меню на своем сайте, который показывает ссылки на разные сайты в моей сети (WordPress Multisite).
Мое решение заключалось в создании site_option с помощью CMB2. Каждый сайт заполняет эти значения, которые затем используются для отображения меню в header.php темы. Однако я получаю только данные site_option главного/основного сайта, несмотря на использование switch_to_blog().
Вот код:
$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' ); // Это функция получения опции, предоставляемая CMB2. Полный код функции здесь: 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 );
}
Может кто-нибудь помочь или предложить другое решение для достижения моей цели?

Для тех, кто наткнется на это в будущем, ответ был фактически дан самим автором CMB2, Майклом Беквитом:
$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' ); // вот обновленный код
$mycolor = $mycolor['test_colorpicker']; // вот обновленный код
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_admin(). Она создает так называемый синглтон, что означает, что только один экземпляр объекта будет существовать в данный момент времени. Она выполняется сразу же, и любой последующий вызов myprefix_admin() будет ссылаться на этот первый объект. Это включает циклы foreach, подобные тому, что вы пытаетесь сделать выше.
...мы просто получаем всю опцию, а затем извлекаем только нужную нам часть, в данном случае значение цветового пикера.
Еще раз спасибо Майклу Беквиту из CMB2.
