Desafortunadamente, el switch_to_blog()
método no va a funcionar para este propósito. switch_to_blog()
en realidad es solo un cambio parcial: realiza algunas modificaciones a $wpdb
esa ayuda con las consultas de la base de datos. Pero no es un cambio completo en la forma en que te puedas imaginar.
En particular, dynamic_sidebar()
depende de global llamado $wp_registered_sidebars
. Este global está poblado por register_sidebar()
, que generalmente se llama desde un archivo de tema como functions.php. Pero functions.php, y el resto del proceso de configuración del tema, no se vuelve a ejecutar switch_to_blog()
. Es decir: si está ejecutando Twenty Eleven en el blog actual, registrará sus propias barras laterales durante el inicio; usando switch_to_blog()
un blog que ejecuta Twenty Ten no le dirá a Twenty Ten que configure sus barras laterales. Podría intentar forzarlo (cargando manualmente las funciones del php del blog conmutado), pero es casi seguro que provocará un desastre, debido a problemas con nombres de funciones duplicados, orden de carga, etc., etc.
Puede intentar una táctica algo diferente: en el blog con la barra lateral que desee, cree una función que imprima el contenido de la barra lateral en el búfer de salida y luego, antes de imprimirlo en la pantalla, guárdelo en una opción de sitio. Luego puede tomar la barra lateral (o una versión estática de ella, al menos) de cualquier sitio en la red. Esto no funcionará si necesita absolutamente una barra lateral totalmente dinámica, pero para la mayoría de los propósitos probablemente no.
Otro método (que puede ser más fácil) es representar la barra lateral con una función en un archivo de plugins mu o algo así, y luego llamar a la función manualmente en sus temas (o engancharla a un gancho de barra lateral común). Puede tomar algo de trabajo abstraer el contenido de la WP_Widget
arquitectura, pero por otro lado, sería una solución verdaderamente dinámica para el problema en cuestión.
Gargantas de Boone
fuente
get_blog_option('1','sidebars_widgets');
para obtener una lista de widgets, pero no pude encontrar de todos modos para procesar los datos en una barra lateral.Me encontré con el mismo problema y descubrí una solución. Lo que estoy haciendo es lo siguiente:
1.) Siempre que se cambie algo en la barra lateral del blog 1, guarde una serie de esos widgets y su configuración como transitorios en todo el sitio, que se quedan obsoletos después de 24 horas.
2.) En todos los blogs secundarios, coloque algún código en sidebar.php que tome este transitorio de todo el sitio y muestre los widgets.
Suena bastante fácil, pero fue muy difícil de entender ... y aún está lejos de ser perfecto.
Veamos un poco de código:
Esto pertenece al blog 1 functions.php (o mejor, un complemento completo) y guarda los widgets en el transitorio a medida cada 24 horas.
Esto también pertenece a las funciones.php del blog 1 y renueva el transitorio cada vez que se actualizan los widgets.
Y finalmente, para los otros blogs, ingrese en sidebar.php:
Espero que esto pueda ayudar a alguien. Si uno tiene alguna mejora, será muy bienvenido.
fuente
Asegúrese de tener exactamente el mismo código de registro de barras laterales ejecutándose en ambos sitios durante widgets_init. Eso debería llenar $ wp_registered_sidebars y resolver el problema que Boone destacó. No he probado esto yo mismo.
fuente
Este 'poder' te señala en la dirección correcta.
Xtreme One - Marco temático - http://marketpress.com/product/xtreme/
Mira el video - http://vimeo.com/52479425
El concepto básico es cuando se agrega una barra lateral a un sitio de red, también se puede asignar como una barra lateral global.
fuente
Estas usando
global $switched;
?fuente
$switched
global se llama desde adentroswitch_to_blog()
. No necesita declararlo en el espacio de nombres global.switch_to_blog()
contexto, porque no es necesario que el tema los registre antes de llamarlos (los datos de registro se almacenan en la base de datos).is_active_sidebar($sidebar_name)
.