複数のブログで実行する場合は、毎回前のブログを復元する必要はありません。成長する唯一のものは$GLOBALS['_wp_switched_stack']
、ブログIDを持つ配列で、心配する必要はありません。
ただし、2回目の切り替え後は機能しなくなりますrestore_current_blog()
(!!!)。以前のブログを使用するためです(最初のブログではないため)。したがって、最初のブログIDを保存し、呼び出します…
switch_to_blog( $first_blog_id );
unset ( $GLOBALS['_wp_switched_stack'] );
$GLOBALS['switched'] = false;
… restore_current_blog()
完了時ではなく。グローバル変数をリセットする必要があります。リセットしないと、@ user42826に記載されている問題が発生します。
パフォーマンスへの影響はhuge大です。12サイトのローカルインストールでいくつかのテストを実行しました。
$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>';
結果:
12 sites
With restore_current_blog(): 0.010648012
Without restore_current_blog(): 0.005203962
restore_current_blog()
各スイッチの後に使用すると、切り替えに必要な時間が倍になります。