Infelizmente, o switch_to_blog()
método não funciona para esse fim. switch_to_blog()
é realmente apenas uma opção parcial - faz algumas modificações para $wpdb
ajudar nas consultas ao banco de dados. Mas não é uma mudança completa da maneira que você pode imaginar.
Em particular, dynamic_sidebar()
depende da chamada global $wp_registered_sidebars
. Esse global é preenchido por register_sidebar()
, geralmente chamado de um arquivo de tema como functions.php. Mas o functions.php e o restante do processo de configuração do tema não são executados novamente switch_to_blog()
. Ou seja: se você estiver executando o Twenty Eleven no blog atual, ele registrará suas próprias barras laterais durante a inicialização; usar switch_to_blog()
em um blog com o Twenty Ten não informará o Twenty Ten para configurar suas barras laterais. Você pode tentar forçá-lo (carregando manualmente o functions.php do switched-blog), mas é quase certo que isso levará a um desastre, devido a problemas com nomes de funções duplicados, ordem de carregamento, etc, etc.
Você pode tentar uma abordagem um pouco diferente: no blog com a barra lateral desejada, crie uma função que imprima o conteúdo da barra lateral no buffer de saída e, antes de imprimi-lo na tela, guarde-o em uma opção de site. Em seguida, você pode pegar a barra lateral (ou uma versão estática dela, pelo menos) em qualquer site da rede. Isso não funcionará se você precisar absolutamente de uma barra lateral totalmente dinâmica, mas para a maioria dos propósitos provavelmente não.
Outro método (que pode ser mais fácil) é renderizar a barra lateral com uma função em um arquivo mu-plugins ou algo parecido e chamar a função manualmente nos seus temas (ou conectá-la a um gancho comum da barra lateral). Pode levar algum trabalho para abstrair o conteúdo da WP_Widget
arquitetura, mas, por outro lado, seria uma solução verdadeiramente dinâmica para o problema em questão.
get_blog_option('1','sidebars_widgets');
para obter uma lista de widgets, mas não consegui encontrar os mesmos para processar os dados em uma barra lateral.Deparou-se com o mesmo problema e meio que descobriu uma solução. O que estou fazendo é o seguinte:
1.) Sempre que algo for alterado na barra lateral do blog 1, salve uma matriz desses widgets e suas configurações como um transitório em todo o site, que desatualiza após 24 horas.
2.) Em todos os blogs filhos, coloque algum código no sidebar.php que agarra esse transiente em todo o site e exibe os widgets.
Parece bem fácil, mas foi muito difícil de entender ... e ainda está longe de ser perfeito.
Vamos cavar alguns códigos:
Isso pertence ao functions.php do blog 1 (ou melhor, um plugin no total) e salva os widgets no transitório sob medida a cada 24 horas.
Isso também pertence ao functions.php do blog 1 e renova o transitório toda vez que os widgets são atualizados.
E, finalmente, para os outros blogs, vá para sidebar.php:
Espero que isso ajude alguém. Se alguém tiver alguma melhoria, será muito bem-vindo.
fonte
Verifique se você tem exatamente o mesmo código de registro das barras laterais em execução nos dois sites durante o widgets_init. Isso deve preencher $ wp_registered_sidebars e resolver o problema destacado por Boone. Ainda não tentei isso.
fonte
Isso pode indicar a direção certa.
Xtreme One - Estrutura do tema - http://marketpress.com/product/xtreme/
Confira o vídeo - http://vimeo.com/52479425
O conceito básico é que, ao adicionar uma barra lateral a um site de rede, você também pode atribuí-la como uma barra lateral global.
fonte
Você está usando
global $switched;
?fonte
$switched
global é chamado de dentroswitch_to_blog()
. Você não precisa declará-lo no espaço para nome global.switch_to_blog()
contexto, porque não precisam ser registrados pelo tema antes de serem chamados (os dados de registro são armazenados no banco de dados).is_active_sidebar($sidebar_name)
.