pengembangan-web-mp-pd.com

Dapatkan posting dari situs di Multisite?

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 ?>
16
DeadArtcore

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:

Berikut 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 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 tautan yang menjelaskan kesalahpahaman saya akan 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 proses switch_to_blog(), $blog_id akan ditimpa oleh fungsi inti, artinya apa ketika Anda mencoba kembali ke blog asli, Anda akan berakhir dengan beralih ke yang terakhir yang Anda lewati. Sedikit teka-teki pikiran. :)

11
birgire

Lihatlah kode di plugin "Multisite Post Reader" saya 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.)

0
Rick Hellewell