Recevoir des messages à partir de sites dans Multisite?

17

J'essaie de tirer plusieurs publications de sites. Par exemple, je peux extraire un seul site des publications par catégorie et un total de 10 publications.

Mais j'essaie de retirer les deux articles de deux blogs multisites distincts 1 et 2. Mais seul le blog 1 fonctionne. Aussi, je veux retirer une autre catégorie du blog 1 et du blog 2 par une autre catégorie. Comment puis-je atteindre cet objectif?

Voici ce que j'essaye de faire:

<?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 ?>
DeadArtcore
la source

Réponses:

12

La fonction WordPress switch_to_blog()attend un entier comme paramètre d'entrée. Vous pouvez en savoir plus à ce sujet dans le Codex:

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

Essayez plutôt ce type de structure:

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

Mise à jour:

Si vous souhaitez récupérer des articles de différentes catégories pour chaque blog, vous pouvez utiliser par exemple:

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

Exemple:

Voici un exemple qui vous permet d'utiliser des balises de modèle (cela fonctionne sur mon installation multisite):

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

Voici une capture d'écran de démonstration pour notre exemple ci-dessus avec le site 1 nommé Beethoven et le site 4 nommé Bach :

démo

PS: Merci à @brasofilo de fournir le lien qui clarifie mon malentendu sur le restore_current_blog();-)

PPS: Merci à @ChristineCooper d'avoir partagé le commentaire suivant:

Juste un avertissement amical. Assurez-vous de ne pas définir votre identifiant de blog d'origine sur variable $blog_id- c'est parce que pendant le switch_to_blog() processus, $blog_idsera remplacé par la fonction principale, ce qui signifie que lorsque vous essayez de revenir au blog d'origine, vous finirez par basculer vers le dernier celui que vous avez parcouru. Un petit casse-tête. :)

Birgire
la source
voici comment je charge mes articles pastie.org/7827649 comment puis-je implémenter cela dans cela aussi comme je le mentionne par les deux identifiants de blog mais chaque identifiant de blog par catégorie spécifique blog 1 aura des vidéos de catégorie et le blog 2 aura les nouvelles de catégorie également un total de 10 postes maximum.
DeadArtcore
1
J'ai mis à jour la réponse pour prendre en charge différentes catégories.
birgire
1
ps: mis à jour l'exemple à nouveau, afin que vous puissiez utiliser des balises de modèle comme the_title()au lieu de $post->post_title;-) J'espère que je vous ai donné suffisamment d'informations pour que vous puissiez terminer votre projet.
birgire
1
Remplacez-le foreach($rightbox as $post)par foreach($posts as $post)votre pastie.
birgire
1
J'espère que c'est ok que j'ai ajouté votre commentaire à la réponse mise à jour @ChristineCooper
birgire
0

Jetez un œil au code dans mon plugin "Multisite Post Reader" https://wordpress.org/plugins/multisite-post-reader/ . Il utilise la technique de l'autre réponse pour parcourir les messages. J'ai également des plugins qui font la même chose pour les images.

Puisqu'il s'agit d'un code open-source, vous êtes invités à parcourir le code et à en utiliser des morceaux pour votre propre usage. (Une partie du code est modifiée à partir du code open-source que j'ai trouvé.)

Rick Hellewell
la source