Ricevi post da siti in Multisito?


17

Sto cercando di pubblicare post su più siti. Ad esempio, posso estrarre i post di un singolo sito per categoria e post totali 10.

Ma sto cercando di estrarre entrambi i post da due blog Multisito 1 e 2. Separati, ma funziona solo il blog 1. Inoltre, desidero estrarre un'altra categoria dal blog 1 e dal blog 2 di un'altra categoria. Come posso raggiungere questo obiettivo?

Ecco cosa sto cercando di fare:

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

Risposte:


12

La funzione WordPress switch_to_blog()prevede un numero intero come parametro di input. Puoi leggere di più al riguardo nel Codice:

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

Prova invece questo tipo di struttura:

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

Aggiornare:

Se desideri recuperare post da diverse categorie per ciascun blog, puoi utilizzare ad esempio:

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

Esempio:

Ecco un esempio che ti consente di utilizzare i tag modello (funziona sulla mia installazione multisito):

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

Ecco uno screenshot dimostrativo per il nostro esempio sopra con il sito 1 di nome Beethoven e il sito 4 di nome Bach :

dimostrazione

PS: Grazie a @brasofilo che fornisce il link che chiarisce il mio fraintendimento del restore_current_blog();-)

PPS: Grazie a @ChristineCooper per aver condiviso il seguente commento:

Solo un avvertimento amichevole. Assicurati di non impostare l'ID del tuo blog originale su variabile $blog_id- questo perché durante il switch_to_blog() processo, $blog_idverrà sostituito dalla funzione principale, il che significa che quando provi a tornare al blog originale, finirai con il passaggio all'ultimo uno che hai attraversato. Un po 'un enigma mentale. :)


ecco come faccio a caricare i miei post pastie.org/7827649 come posso implementarlo anche in questo come menziono entrambi gli ID del blog ma ogni ID del blog per categoria specifica il blog 1 avrà video di categoria e il blog 2 avrà anche le notizie di categoria un totale di post di limite 10.
DeadArtcore,

1
Ho aggiornato la risposta per supportare diverse categorie.
birgire,

1
ps: aggiornato di nuovo l'esempio, in modo da poter usare tag modello come the_title()invece di $post->post_title;-) Spero di averti dato abbastanza informazioni da poter finire il tuo progetto.
birgire,

1
Sostituisci foreach($rightbox as $post)con foreach($posts as $post)nel tuo pastie.
birgire,

1
Spero sia ok che ho aggiunto il tuo commento alla risposta aggiornata @ChristineCooper
birgire

0

Dai un'occhiata al codice nel mio plugin "Multisite Post Reader" https://wordpress.org/plugins/multisite-post-reader/ . Usa la tecnica nell'altra risposta per scorrere tra i post. Ho anche plugin che fanno la stessa cosa per le immagini.

Dal momento che è un codice open-source, sei invitato a vagare attraverso il codice e usarne pezzi per uso personale. (Parte del codice è stato modificato dal codice open source che ho trovato.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.