Wenn Sie mehrere Blogs durchsuchen möchten, müssen Sie das vorherige Blog nicht jedes Mal wiederherstellen. Das einzige, was wächst, ist $GLOBALS['_wp_switched_stack']
ein Array mit Blog-IDs, über das Sie sich keine Sorgen machen müssen.
Aber denken Sie daran, restore_current_blog()
wird nach dem zweiten Wechsel nicht mehr funktionieren (!!!) , Da es das vorherige Blog verwendet - das ist dann nicht das erste Blog. Speichern Sie also die erste Blog-ID und rufen Sie an…
switch_to_blog( $first_blog_id );
unset ( $GLOBALS['_wp_switched_stack'] );
$GLOBALS['switched'] = false;
... anstatt restore_current_blog()
wenn Sie fertig sind. Die globalen Variablen müssen zurückgesetzt werden, andernfalls treten die von @ user42826 genannten Probleme auf.
Die Auswirkungen auf die Leistung sind enorm. Ich habe einige Tests auf einer lokalen Installation mit 12 Standorten durchgeführt:
$sites = wp_get_sites();
print '<pre>' . count( $sites ) . " sites\n";
timer_start();
print 'With restore_current_blog(): ';
foreach ( $sites as $site ) {
switch_to_blog( $site[ 'blog_id' ] );
restore_current_blog();
}
timer_stop( 1, 9 );
print "\nWithout restore_current_blog(): ";
timer_start();
$current_site = get_current_blog_id();
foreach ( $sites as $site ) {
switch_to_blog( $site[ 'blog_id' ] );
}
switch_to_blog( $current_site );
$GLOBALS['_wp_switched_stack'] = array();
$GLOBALS['switched'] = FALSE;
timer_stop( 1, 9 );
print '</pre>';
Ergebnis:
12 sites
With restore_current_blog(): 0.010648012
Without restore_current_blog(): 0.005203962
Durch die Verwendung restore_current_blog()
nach jedem Schalter wird die Zeit verdoppelt, die nur zum Umschalten benötigt wird.