Nếu bạn muốn chạy trên nhiều blog, không cần phải khôi phục blog trước đó mỗi lần. Điều duy nhất phát triển là $GLOBALS['_wp_switched_stack']
- một mảng với ID blog, không có gì phải lo lắng.
Nhưng hãy nhớ, restore_current_blog()
sẽ không hoạt động (!!) Sau lần chuyển đổi thứ hai, bởi vì nó sử dụng blog trước đó - không phải là blog đầu tiên sau đó. Vì vậy, hãy lưu trữ ID blog đầu tiên và gọi điện
switch_to_blog( $first_blog_id );
unset ( $GLOBALS['_wp_switched_stack'] );
$GLOBALS['switched'] = false;
… thay vì restore_current_blog()
khi bạn hoàn thành. Các biến toàn cục phải được đặt lại hoặc bạn sẽ gặp phải các vấn đề được đề cập bởi @ user42826.
Tác động hiệu suất là rất lớn. Tôi đã chạy một số thử nghiệm trên bản cài đặt cục bộ với 12 trang web:
$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>';
Kết quả:
12 sites
With restore_current_blog(): 0.010648012
Without restore_current_blog(): 0.005203962
Sử dụng restore_current_blog()
sau mỗi chuyển đổi nhân đôi thời gian cần thiết chỉ để chuyển đổi.