Fungsi WordPress switch_to_blog()
mengharapkan integer sebagai parameter input. Anda dapat membaca lebih lanjut tentang itu di Codex:
http://codex.wordpress.org/Function_Reference/switch_to_blog
Silakan coba struktur semacam ini sebagai gantinya:
// Get the current blog id
$original_blog_id = get_current_blog_id();
// All the blog_id's to loop through
$bids = array( 1, 2 );
foreach( $bids as $bid )
{
// Switch to the blog with the blog_id $bid
switch_to_blog( $bid );
// ... your code for each blog ...
}
// Switch back to the current blog
switch_to_blog( $original_blog_id );
Memperbarui:
Jika Anda ingin mengambil posting dari berbagai kategori untuk setiap blog, Anda dapat menggunakan misalnya:
// Get current blog
$original_blog_id = get_current_blog_id();
// Setup a category slug for each blog id, you want to loop through - EDIT
$catslug_per_blog_id = array(
1 => 'video',
4 => 'news'
);
foreach( $catslug_per_blog_id as $bid => $catslug )
{
// Switch to the blog with the blog id $bid
switch_to_blog( $bid );
// ... your code for each blog ...
$myposts = get_posts(
array(
'category_name' => $catslug,
'posts_per_page' => 10,
)
);
// ... etc
}
// Switch back to the current blog
switch_to_blog( $original_blog_id );
Contoh:
Ini adalah contoh yang memungkinkan Anda untuk menggunakan tag templat (ini berfungsi pada instalasi multisite saya):
// Get current blog
$original_blog_id = get_current_blog_id();
// Setup a category for each blog id you want to loop through - EDIT
$catslug_per_blog_id = array(
1 => 'video',
4 => 'news'
);
foreach( $catslug_per_blog_id as $bid => $catslug )
{
//Switch to the blog with the blog id $bid
switch_to_blog( $bid );
// Get posts for each blog
$myposts = get_posts(
array(
'category_name' => $catslug,
'posts_per_page' => 2,
)
);
// Skip a blog if no posts are found
if( empty( $myposts ) )
continue;
// Loop for each blog
$li = '';
global $post;
foreach( $myposts as $post )
{
setup_postdata( $post );
$li .= the_title(
$before = sprintf( '<li><a href="%s">', esc_url( get_permalink() ) ),
$after = '</a></li>',
$echo = false
);
}
// Print for each blog
printf(
'<h2>%s (%s)</h2><ul>%s</ul>',
esc_html( get_bloginfo( 'name' ) ),
esc_html( $catslug ),
$li
);
}
// Switch back to the current blog
switch_to_blog( $original_blog_id );
wp_reset_postdata();
Berikut ini adalah screenshot demo untuk contoh kami di atas dengan situs 1 bernama Beethoven dan situs 4 bernama Bach :
PS: Terima kasih kepada @brasofilo yang menyediakan tautannya yang menjelaskan kesalahpahaman saya tentang restore_current_blog()
;-)
PPS: Terima kasih kepada @ChristineCooper untuk berbagi komentar berikut:
Hanya peringatan ramah. Pastikan untuk tidak mengatur id blog asli Anda ke variabel $blog_id
- ini karena selama switch_to_blog()
proses, $blog_id
akan ditimpa oleh fungsi inti, artinya apa ketika Anda mencoba untuk beralih kembali ke blog asli, Anda akan berakhir dengan beralih ke yang terakhir yang Anda lewati. Sedikit teka-teki pikiran. :)
the_title()
bukannya$post->post_title
;-) Saya harap saya telah memberi Anda cukup info sehingga Anda dapat menyelesaikan proyek Anda.foreach($rightbox as $post)
denganforeach($posts as $post)
pastie Anda.Lihatlah kode dalam saya "Multisite Posting Pembaca" Plugin https://wordpress.org/plugins/multisite-post-reader/ . Ini menggunakan teknik di jawaban lain untuk mengulang posting. Saya juga memiliki plugin yang melakukan hal yang sama untuk gambar.
Karena ini adalah kode sumber terbuka, Anda dipersilakan untuk menelusuri kode dan menggunakan potongan-potongan itu untuk Anda gunakan sendiri. (Beberapa kode dimodifikasi dari kode sumber terbuka yang saya temukan.)
sumber