К сожалению, switch_to_blog()
метод не будет работать для этой цели. switch_to_blog()
действительно является лишь частичным переключателем - он вносит некоторые изменения в $wpdb
эту помощь с запросами к базе данных. Но это не полный переход, как вы можете себе представить.
В частности, dynamic_sidebar()
зависит от глобального Android $wp_registered_sidebars
. Этот глобальный register_sidebar()
объект заполнен , который обычно вызывается из файла темы, например functions.php. Но functions.php и остальная часть процесса установки темы не выполняются повторно switch_to_blog()
. То есть: если вы используете Twenty Eleven в текущем блоге, он будет регистрировать собственные боковые панели во время запуска; использование switch_to_blog()
блога Twenty Ten не скажет Twenty Ten настроить его боковые панели. Вы можете попытаться форсировать его (загрузив файл functions.php на переключаемый блог вручную), но это почти наверняка приведет к катастрофе из-за проблем с дублирующимися именами функций, порядка загрузки и т. Д. И т. Д. И т. Д.
Вы могли бы попробовать несколько иной способ: В блоге с нужной боковой панелью создайте функцию, которая будет печатать содержимое боковой панели в выходной буфер, а затем, перед печатью на экране, сохраните его в site_option. Затем вы можете получить боковую панель (или, по крайней мере, ее статическую версию) с любого сайта в сети. Это не сработает, если вам абсолютно необходима полностью динамическая боковая панель, но в большинстве случаев это не так.
Другой метод (который может быть проще) состоит в том, чтобы визуализировать боковую панель с функцией в файле mu-plugins или чем-то в этом роде, а затем вручную вызвать функцию в ваших темах (или подключить ее к общему крюку боковой панели). Может потребоваться некоторая работа для абстрагирования контента от WP_Widget
архитектуры, но, с другой стороны, это будет действительно динамичное решение проблемы.
get_blog_option('1','sidebars_widgets');
для получения списка виджетов, но я не мог найти, чтобы обработать данные в боковую панель.Наткнулся на ту же проблему и вроде нашел решение. Что я делаю, это следующее:
1.) Всякий раз, когда что-то изменяется на боковой панели блога 1, сохраняйте массив этих виджетов и их настройки в виде переходного процесса, который устарел через 24 часа.
2.) На всех дочерних блогах, поместите некоторый код в sidebar.php, который захватывает этот переход по всему сайту и отображает виджеты.
Звучит довольно легко, но было очень трудно понять ... и все еще далек от совершенства.
Давайте углубимся в некоторый код:
Это входит в файл functions.php блога 1 (или, лучше сказать, плагин вообще) и сохраняет виджеты в переходный процесс на заказ каждые 24 часа.
Это также относится к блогу functions.php и обновляет переходный процесс при каждом обновлении виджетов.
И, наконец, для других блогов зайдите в sidebar.php:
Надеюсь, это может кому-нибудь помочь. Если есть какие-то улучшения, они будут очень рады.
источник
Убедитесь, что у вас есть одинаковый код регистрации боковых панелей, работающий на обоих сайтах во время widgets_init. Это должно заполнить $ wp_registered_sidebars и решить проблему, которую выделил Бун. Сам не пробовал.
источник
Это «может» направить вас в правильном направлении.
Xtreme One - Theme Framework - http://marketpress.com/product/xtreme/
Проверьте видео - http://vimeo.com/52479425
Основная концепция заключается в том, что при добавлении боковой панели к сетевому сайту вы также можете назначить ее в качестве глобальной боковой панели.
источник
Вы используете
global $switched;
?источник
$switched
Глобальный вызывается изswitch_to_blog()
. Вам не нужно объявлять это в глобальном пространстве имен.switch_to_blog()
контексте, потому что они не должны регистрироваться темой перед вызовом (регистрационные данные хранятся в базе данных).is_active_sidebar($sidebar_name)
.