Dapatkan posting dari situs di Multisite?


17

Saya mencoba menarik beberapa posting situs. Sebagai contoh, saya dapat menarik satu posting situs berdasarkan kategori dan total posting 10.

Tetapi saya mencoba menarik kedua posting dari dua blog Multisite 1 & 2. yang terpisah. Tetapi hanya blog 1 yang berfungsi. Juga, saya ingin mengeluarkan kategori lain dari blog 1 dan blog 2 dengan kategori lain. Bagaimana saya bisa mencapai ini?

Inilah yang saya coba lakukan:

<?php
global $switched;
switch_to_blog(1,2); //switched to 1 & 2 but only 1 working

// Get latest Post
$latest_posts = get_posts('&cat=64&showposts=10');
$cnt =0;?> 
    <ul>
    <?php foreach($latest_posts as $post) : setup_postdata($post);?>
    <li>
        <a href="<?php echo get_page_link($post->ID); ?>" title="<?php echo $post->post_title; ?>"><?php echo  short_title('...', 7); ?></a>
    </li>                                
<?php endforeach ; ?>

<?php restore_current_blog(); //switched back to main site ?>

Jawaban:


12

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 :

demo

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_idakan 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. :)


inilah cara saya memuat posting saya pastie.org/7827649 bagaimana saya bisa menerapkannya ke dalam ini juga seperti yang saya sebutkan oleh kedua id blog tetapi setiap id blog dengan kategori tertentu blog 1 akan memiliki video kategori & blog 2 akan memiliki kategori berita juga mendapatkan total posting 10 batas.
DeadArtcore

1
Saya memperbarui jawaban untuk mendukung berbagai kategori.
birgire

1
ps: perbarui contoh lagi, sehingga Anda dapat menggunakan tag templat seperti the_title()bukannya $post->post_title;-) Saya harap saya telah memberi Anda cukup info sehingga Anda dapat menyelesaikan proyek Anda.
birgire

1
Ganti foreach($rightbox as $post)dengan foreach($posts as $post)pastie Anda.
birgire

1
Semoga tidak apa-apa saya menambahkan komentar Anda ke jawaban yang diperbarui
@ChristineCooper

0

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.)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.