Если вы хотите работать с несколькими блогами, нет необходимости каждый раз восстанавливать предыдущий блог. Единственное, что растет $GLOBALS['_wp_switched_stack']
- массив с идентификаторами блогов, не о чем беспокоиться.
Но имейте в виду, restore_current_blog()
больше не будет работать (!!!) После второго переключения, потому что он использует предыдущий блог - который не является первым блогом тогда. Так что храните первый идентификатор блога и звоните ...
switch_to_blog( $first_blog_id );
unset ( $GLOBALS['_wp_switched_stack'] );
$GLOBALS['switched'] = false;
... вместо того, restore_current_blog()
когда вы закончите. Глобальные переменные должны быть сброшены, иначе вы столкнетесь с проблемами, упомянутыми @ user42826.
Влияние на производительность огромно. Я провел несколько тестов для локальной установки с 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()
после каждого переключателя удваивает время, необходимое только для переключения.