Die WordPress-Funktion switch_to_blog()
erwartet eine Ganzzahl als Eingabeparameter. Sie können mehr darüber im Codex lesen:
http://codex.wordpress.org/Function_Reference/switch_to_blog
Bitte versuchen Sie stattdessen diese Art von Struktur:
// 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 );
Aktualisieren:
Wenn Sie Beiträge aus verschiedenen Kategorien für jedes Blog abrufen möchten, können Sie zum Beispiel Folgendes verwenden:
// 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 );
Beispiel:
Hier ist ein Beispiel, mit dem Sie Vorlagen-Tags verwenden können (dies funktioniert bei meiner Installation mit mehreren Standorten):
// 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();
Hier ist ein Demo-Screenshot unseres obigen Beispiels mit Site 1 namens Beethoven und Site 4 namens Bach :
PS: Danke an @brasofilo für den Link , der mein Missverständnis des klarstellt restore_current_blog()
;-)
PPS: Danke an @ChristineCooper für den folgenden Kommentar:
Nur eine freundliche Warnung. Stellen Sie sicher, dass Sie Ihre ursprüngliche Blog-ID nicht auf "variabel" setzen. $blog_id
Dies liegt daran, dass während des switch_to_blog()
Vorgangs $blog_id
die Kernfunktion die ID überschreibt. Wenn Sie also versuchen, zum ursprünglichen Blog zurückzukehren, wechseln Sie letztendlich zum letzten Blog eine, die du durchgeschleift hast. Ein kleines Rätsel. :)
the_title()
anstatt verwenden kannst$post->post_title
;-) Ich hoffe, ich habe dir genug infos gegeben, damit du dein projekt fertigstellen kannst.foreach($rightbox as $post)
mitforeach($posts as $post)
in Ihrer Pastete.Schauen Sie sich den Code in meinem Plugin "Multisite Post Reader" an: https://wordpress.org/plugins/multisite-post-reader/ . Es verwendet die Technik in der anderen Antwort, um die Beiträge zu durchlaufen. Ich habe auch Plugins, die dasselbe für Bilder tun.
Da es sich um einen Open-Source-Code handelt, können Sie gerne durch den Code schlendern und Teile davon für Ihren eigenen Gebrauch verwenden. (Ein Teil des Codes wurde aus dem gefundenen Open-Source-Code modifiziert.)
quelle