Obtenir des publications de sites multisites?

15

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

Mais j'essaie d'extraire les deux publications de deux blogs multisites distincts 1 & 2. Mais seul le blog 1 fonctionne. De plus, je souhaite extraire une autre catégorie des blogs 1 et 2 par une autre catégorie. Comment puis-je y parvenir?

Voici ce que j'essaie 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 ?>
    
posée DeadArtcore 10.05.2013 - 05:25

2 réponses

11

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:

enlace

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 publications 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 de notre exemple ci-dessus avec le site 1 nommé Beethoven et le site 4 nommé Bach :

PS:Mercià@brasofilopourlelien . cela clarifie mon incompréhension du restore_current_blog() ; -)

PPS: Merci à @ChristineCooper pour le commentaire suivant:

  

Juste un avertissement amical. Assurez-vous de ne pas définir l'identifiant de blog d'origine sur   variable $blog_id - ceci est dû au fait que pendant la switch_to_blog()   processus, $blog_id sera remplacé par la fonction principale, ce qui signifie   lorsque vous essayez de revenir au blog original, vous vous retrouvez avec   passer au dernier que vous avez bouclé. Un peu d'un   casse-tête. :)

    
réponse donnée birgire 10.05.2013 - 10:24
0

Consultez le code de mon plugin "Multisite Post Reader" enlace . Il utilise la technique de l'autre réponse pour parcourir les messages. J'ai aussi des plugins qui font la même chose pour les images.

Comme il s’agit d’un code à source ouverte, vous pouvez le parcourir et en utiliser des parties pour votre usage personnel. (Une partie du code est modifiée à partir du code open source que j'ai trouvé.)

    
réponse donnée Rick Hellewell 15.09.2018 - 19:30

Lire d'autres questions sur les étiquettes