หากคุณต้องการเรียกใช้หลาย ๆ บล็อกไม่จำเป็นต้องกู้คืนบล็อกก่อนหน้าในแต่ละครั้ง สิ่งเดียวที่เพิ่มขึ้นคือ$GLOBALS['_wp_switched_stack']
- อาร์เรย์ที่มี ID บล็อกไม่มีอะไรต้องกังวล
แต่โปรดจำไว้ว่าrestore_current_blog()
จะไม่ทำงาน (!!!)อีกต่อไปหลังจากเปลี่ยนครั้งที่สองเพราะใช้บล็อกก่อนหน้า - ซึ่งไม่ใช่บล็อกแรกแล้ว ดังนั้นเก็บ ID บล็อกแรกและโทร ...
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()
หลังจากสวิตช์แต่ละครั้งจะเพิ่มเวลาเป็นสองเท่าสำหรับการสลับ