Erhalten Sie Beiträge von Websites in Multisite?


17

Ich versuche, mehrere Website-Posts abzurufen. Zum Beispiel kann ich einzelne Site-Posts nach Kategorie und Gesamtzahl der Posts 10 herausziehen.

Aber ich versuche, beide Posts aus zwei separaten Multisite-Blogs 1 und 2 herauszunehmen. Aber nur Blog 1 funktioniert. Außerdem möchte ich eine andere Kategorie aus Blog 1 und Blog 2 nach einer anderen Kategorie herausziehen. Wie kann ich das erreichen?

Folgendes versuche ich zu tun:

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

Antworten:


12

Die WordPress-Funktion switch_to_blog()erwartet eine Ganzzahl als Eingabeparameter. Sie können mehr darüber im Codex lesen:

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

Bitte versuchen Sie stattdessen diese Art von Struktur:

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

Aktualisieren:

Wenn Sie Beiträge aus verschiedenen Kategorien für jedes Blog abrufen möchten, können Sie zum Beispiel Folgendes verwenden:

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

Beispiel:

Hier ist ein Beispiel, mit dem Sie Vorlagen-Tags verwenden können (dies funktioniert bei meiner Installation mit mehreren Standorten):

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

Hier ist ein Demo-Screenshot unseres obigen Beispiels mit Site 1 namens Beethoven und Site 4 namens Bach :

Demo

PS: Danke an @brasofilo für den Link , der mein Missverständnis des klarstellt restore_current_blog();-)

PPS: Danke an @ChristineCooper für den folgenden Kommentar:

Nur eine freundliche Warnung. Stellen Sie sicher, dass Sie Ihre ursprüngliche Blog-ID nicht auf "variabel" setzen. $blog_idDies liegt daran, dass während des switch_to_blog() Vorgangs $blog_iddie Kernfunktion die ID überschreibt. Wenn Sie also versuchen, zum ursprünglichen Blog zurückzukehren, wechseln Sie letztendlich zum letzten Blog eine, die du durchgeschleift hast. Ein kleines Rätsel. :)


Hier ist, wie ich meine Beiträge lade pastie.org/7827649 Wie kann ich das auch in diese implementieren, wie ich es von beiden Blog-IDs erwähne, aber jede Blog-ID von Blog 1 einer bestimmten Kategorie wird Kategorie-Videos haben und Blog 2 wird die Kategorie-News auch bekommen insgesamt Beiträge von 10 begrenzen.
DeadArtcore

1
Ich habe die Antwort aktualisiert, um verschiedene Kategorien zu unterstützen.
Birgire

1
ps: das beispiel wurde erneut aktualisiert, so dass du vorlagen-tags wie the_title()anstatt verwenden kannst $post->post_title;-) Ich hoffe, ich habe dir genug infos gegeben, damit du dein projekt fertigstellen kannst.
Birgire

1
Ersetzen Sie foreach($rightbox as $post)mit foreach($posts as $post)in Ihrer Pastete.
Birgire

1
Hoffe, es ist in Ordnung, dass ich deinen Kommentar zur aktualisierten Antwort @ChristineCooper
birgire am

0

Schauen Sie sich den Code in meinem Plugin "Multisite Post Reader" an: https://wordpress.org/plugins/multisite-post-reader/ . Es verwendet die Technik in der anderen Antwort, um die Beiträge zu durchlaufen. Ich habe auch Plugins, die dasselbe für Bilder tun.

Da es sich um einen Open-Source-Code handelt, können Sie gerne durch den Code schlendern und Teile davon für Ihren eigenen Gebrauch verwenden. (Ein Teil des Codes wurde aus dem gefundenen Open-Source-Code modifiziert.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.