Intereting Posts
Масштабируемая настройка рамки Как вы можете ограничить количество изображений / видео, которые могут быть загружены в сообщение WordPress Как создать функцию admin ajax для моей контактной формы Как изменить пользовательский порядок сообщений ASC / DESC menu_order разумно динамически? Возвращать единый таксономический термин вне цикла Как проверить сообщение, липкий или еще нет? Как я могу сделать перевод «Оставить комментарий»? Обманчивое предупреждение о месте на моем сайте WordPress Пользовательский почтовый заказ не работает Использовать шаблон для сообщений с определенной категорией grandparent Показать заголовок TwentyEleven только на главной странице Штрих-код вложенности приводит к тому, что внутренний короткий код помещается после внешнего короткого кода Уокер добавит разметку Bootstrap для wp_list_pages добавление goole карты на сайт с импортом данных из базы данных mysql Восстановление результатов резервного копирования .sql в «Ошибка установления соединения с базой данных»

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

Я хотел создать компонент меню на своем сайте, который показывает ссылки на разные сайты в моей сети (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 ); } 

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

Для тех, кто наткнется на это в будущем, на это ответил сам автор 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.