Sayangnya, switch_to_blog()
metode ini tidak akan berfungsi untuk tujuan ini. switch_to_blog()
sebenarnya hanya sebagian saklar - itu membuat beberapa modifikasi untuk $wpdb
bantuan dengan permintaan basis data. Tapi itu bukan saklar lengkap dalam cara yang Anda bayangkan.
Secara khusus, dynamic_sidebar()
tergantung pada panggilan global $wp_registered_sidebars
. Global ini diisi oleh register_sidebar()
, yang umumnya dipanggil dari file tema seperti functions.php. Tapi functions.php, dan sisa proses pengaturan tema, tidak dijalankan kembali oleh switch_to_blog()
. Artinya: jika Anda menjalankan Twenty Eleven di blog saat ini, itu akan mendaftarkan sidebars sendiri selama startup; menggunakan switch_to_blog()
untuk blog yang menjalankan Twenty Ten tidak akan memberitahu Twenty Ten untuk mengatur sidebars -nya . Anda dapat mencoba memaksanya (dengan memuat functions.php switched-blog secara manual) tetapi ini hampir pasti menyebabkan bencana, karena masalah dengan nama fungsi duplikat, urutan pemuatan, dll dll.
Anda dapat mencoba taktik yang agak berbeda: Di blog dengan bilah sisi yang Anda inginkan, bangun sebuah fungsi yang akan mencetak isi bilah sisi ke dalam buffer output, dan kemudian sebelum mencetaknya ke layar, simpan di situs_pilihan. Kemudian Anda dapat mengambil bilah samping (atau versi statis, setidaknya) dari situs mana pun di jaringan. Ini tidak akan berfungsi jika Anda benar-benar membutuhkan bilah sisi yang benar-benar dinamis, tetapi untuk sebagian besar tujuan Anda mungkin tidak.
Metode lain (yang mungkin lebih mudah) adalah merender sidebar dengan fungsi dalam file mu-plugins atau semacamnya, dan kemudian memanggil fungsi secara manual di tema Anda (atau mengaitkannya ke kait sidebar umum). Mungkin diperlukan beberapa pekerjaan untuk mengabstraksi konten dari WP_Widget
arsitektur, tetapi di sisi lain itu akan menjadi solusi yang benar-benar dinamis untuk masalah yang dihadapi.
get_blog_option('1','sidebars_widgets');
untuk mendapatkan daftar widget tetapi saya tidak dapat menemukan cara untuk memproses data menjadi sidebar.Berlari ke masalah yang sama dan menemukan solusi. Apa yang saya lakukan adalah sebagai berikut:
1.) Setiap kali ada sesuatu yang berubah di sidebar blog 1, simpan array widget tersebut dan pengaturannya sebagai transient seluruh dunia, yang akan kedaluwarsa setelah 24 jam.
2.) Pada semua blog anak-anak, masukkan beberapa kode ke sidebar.php yang mengambil transient seluruh tempat ini dan menampilkan widget.
Kedengarannya cukup mudah, tetapi sangat sulit untuk mencari tahu ... dan masih jauh dari sempurna.
Mari kita menggali beberapa Kode:
Ini termasuk dalam functions.php blog 1 (atau lebih baik, plugin semuanya) dan menyimpan widget ke transient dipesan lebih dahulu setiap 24 jam.
Ini juga termasuk ke dalam fungsi blog 1. php dan memperbarui sementara setiap kali widget diperbarui.
Dan akhirnya untuk blog lain masuk ke sidebar.php:
Semoga ini bisa membantu seseorang. Jika seseorang memiliki perbaikan, mereka akan sangat disambut.
sumber
Pastikan Anda memiliki kode registrasi sidebars yang sama persis berjalan di kedua situs selama widgets_init. Itu seharusnya mengisi $ wp_registered_sidebars dan menyelesaikan masalah yang disoroti Boone. Belum mencoba ini sendiri.
sumber
Ini 'mungkin' mengarahkan Anda ke arah yang benar.
Xtreme One - Kerangka Tema - http://marketpress.com/product/xtreme/
Periksa videonya - http://vimeo.com/52479425
Konsep dasarnya adalah ketika menambahkan sidebar ke situs jaringan, Anda juga dapat menetapkannya sebagai sidebar global.
sumber
Apakah Anda menggunakan
global $switched;
?sumber
$switched
global dipanggil dari dalamswitch_to_blog()
. Anda tidak perlu mendeklarasikannya di namespace global.switch_to_blog()
konteks, karena mereka tidak perlu didaftarkan oleh tema sebelum dipanggil (data pendaftaran disimpan dalam database).is_active_sidebar($sidebar_name)
.