Multisite'deki sitelerden yayınlar alınıyor mu?


17

Birden fazla site yayını çekmeye çalışıyorum. Örneğin, bir kategori ve toplam mesaj 10 tek bir site mesajları çıkarabilirim.

Ama iki ayrı Multisite blog 1 & 2'den her iki yayını da çıkarmaya çalışıyorum. Ama sadece blog 1 çalışıyor. Ayrıca, blog 1'den ve blog 2'den başka bir kategoriye göre başka bir kategori çıkarmak istiyorum. Bunu nasıl başarabilirim?

İşte yapmaya çalıştığım şey:

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

Yanıtlar:


12

WordPress işlevi, switch_to_blog()bir tamsayı girdi parametresi olarak bekler. Kodeks'den daha fazla bilgi edinebilirsiniz:

http://codex.wordpress.org/Function_Reference/switch_to_blog

Lütfen bunun yerine bu tür bir yapıyı deneyin:

// 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 ); 

Güncelleme:

Her blog için farklı kategorilerden yayınlar almak istiyorsanız, örneğin şunları kullanabilirsiniz:

// 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 ); 

Misal:

Şablon etiketlerini kullanmanıza izin veren bir örnek (bu çoklu site kurulumumda çalışır)

// 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();

Beethoven adlı site 1 ve Bach adlı site 4 ile yukarıdaki örneğimiz için bir demo ekran görüntüsü :

gösteri

PS: @brasofilo sayesinde ;-) yanlış anlama benim açıklayan bağlantı sağlayan teşekkürlerrestore_current_blog()

PPS: Aşağıdaki yorumu paylaştığı için @ChristineCooper'a teşekkürler:

Sadece dostça bir uyarı. Orijinal blog kimliğinizi değişken olarak ayarlamadığınızdan emin olun $blog_id- bunun nedeni switch_to_blog() işlem sırasında $blog_idtemel işlev tarafından geçersiz kılınacağı anlamına gelir, yani orijinal blog'a geri dönmeye çalıştığınızda, sonuncuya geçmeniz gerekir. içinden geçtiğiniz. Biraz akıl bulmacası. :)


burada nasıl benim mesajları yük pastie.org/7827649 nasıl ben de her iki blog kimlikleri tarafından söz gibi bu içine uygulayabilirsiniz ama belirli kategori blog 1 tarafından her blog kimliği kategori videoları olacak ve blog 2 de kategori haber olacak toplam 10 limitlik mesaj.
DeadArtcore

1
Cevabı farklı kategorileri destekleyecek şekilde güncelledim.
birgire

1
ps: örneği tekrar güncelledi, böylece ;-) gibi şablon etiketlerini kullanabilirsiniz the_title(). $post->post_titleUmarım projenizi bitirebilmeniz için size yeterli bilgi vermiş olurum.
birgire

1
Değiştir foreach($rightbox as $post)ile foreach($posts as $post)sizin pastie içinde.
birgire

1
Umarım yorumunuzu güncellenmiş yanıta ekledim @ChristineCooper
birgire

0

Https://wordpress.org/plugins/multisite-post-reader/ adresindeki "Multisite Post Reader" eklentimdeki koda bir göz atın . Diğer cevaptaki tekniği direkler arasında dolaşmak için kullanır. Ayrıca resimler için aynı şeyi yapan eklentilerim var.

Açık kaynaklı bir kod olduğu için, kodda dolaşıp kendi kullanımınız için parçalarını kullanabilirsiniz. (Kodun bir kısmı bulduğum açık kaynak kodundan değiştirildi.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.