Как получить пользовательские данные метабокса из каждого многосайтового блога?

Я хотел создать компонент меню на своем сайте, который показывает ссылки на разные сайты в моей сети (WordPress Multisite).

Моим решением было создать site_option с использованием CMB2. Каждый сайт заполнит все необходимые значения, которые затем будут использоваться для меню, которое будет отображаться на заголовке темы. Тем не менее, я получаю только данные сайта 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' ); //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 ); } 

Может ли кто-нибудь помочь мне или, может быть, указать мне на другое решение для достижения моей цели?

Solutions Collecting From Web of "Как получить пользовательские данные метабокса из каждого многосайтового блога?"

Для тех, кто наткнется на это в будущем, на это ответил сам автор 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' ); // 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_admin (), в конце концов. Это создает то, что известно как одноэлементное, что означает, что только один экземпляр объекта будет существовать в данный момент времени. Он запускается сразу, и всякий раз, когда вы выполняете вызов с помощью myprefix_admin (), он будет ссылаться на этот первый объект. Это включает внутри петли foreach, как то, что вы пытаетесь сделать выше.

… то, что мы делаем, это просто получить весь вариант, а затем вырвать только ту часть, которая нам нужна, в этом случае значение выбора цвета.

Еще раз спасибо Майклу Беквиту от CMB2.