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. :)