Si vous souhaitez parcourir plusieurs blogs, il n'est pas nécessaire de restaurer le blog précédent à chaque fois. La seule chose qui se développe est $GLOBALS['_wp_switched_stack']
- un tableau avec des identifiants de blog, rien d’inquiétant.
Mais gardez à l'esprit que restore_current_blog()
ne fonctionnera plus après le deuxième commutateur, car il utilise le blog précédent, qui n'est pas le blog premier . Enregistrez donc le premier identifiant de blog et appelez…
switch_to_blog( $first_blog_id );
unset ( $GLOBALS['_wp_switched_stack'] );
$GLOBALS['switched'] = false;
… au lieu de restore_current_blog()
lorsque vous avez terminé. Les variables globales doivent être réinitialisées, sinon vous rencontrerez les problèmes mentionnés par @ user42826.
L'impact sur les performances est énorme. J'ai effectué des tests sur une installation locale comprenant 12 sites:
$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>';
Résultat:
12 sites
With restore_current_blog(): 0.010648012
Without restore_current_blog(): 0.005203962
Si vous utilisez restore_current_blog()
après chaque commutateur, vous doublez la durée nécessaire à la commutation.