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 :
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_id
sera 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. :)
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.foreach($rightbox as $post)
parforeach($posts as $post)
votre pastie.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é.)
la source