В целом я довольно давно работаю с функционалом WordPress Мультисайт, плюс-минус с 2014-го года, сначала у меня было много клиентов, которым было это нужно, затем появились собственные продукты, которые я поддерживаю и дорабатываю по сей день.
В этом уроке я бы хотел поделиться с вами способом ускорения связки switch_to_blog() – restore_current_blog() при работе с ними в цикле.
Например у вас есть массив с сайтами вашей сети мультисайт и вам нужно пройтись через каждый из них в цикле и сделать какое-то определённое действие. Выглядеть это будет вот так:
$site_ids = array( 5, 7, 10, 22, ... ); foreach( $site_ids as $site_id ) { switch_to_blog( $site_id ); // тут мы выполняем некоторые действия для сайта restore_current_blog(); }
Так вот, если вы работаете с подобным циклом и у вас большое количество сайтов внутри массива, то вся эта история может работать не супер-быстро.
Наша хитрость будет заключаться в том, что мы полностью откажемся от функции restore_current_blog(), перед началом цикла запишем в переменую самый первый сайт, и когда сделаем все действия, мы переключимся к нему функцией switch_to_blog(). Вот как это будет выглядеть:
$site_ids = array( 5, 7, 10, 22, ... ); $first_site_id = get_current_blog_id(); foreach( $site_ids as $site_id ) { switch_to_blog( $site_id ); // тут мы выполняем некоторые действия для сайта } switch_to_blog( $first_site_id ); $GLOBALS[ '_wp_switched_stack' ] = array(); $GLOBALS[ 'switched' ] = false;
Я почитал слегка о том, что люди пишут в интернете о подобном подходе – и некоторые клинятся, что выиграли в производительности до 40%! Ну что же, круто, а вы что думаете об этом?