switch_to_blog()
Переключается на указанный блог в системе мультисайтов.
Переключает все глобальные переменные на указанный блог в системе мультисайтов. Полезен, когда нужно получить записи и прочую информацию из другого блога.
Не переключается следующее:
- Загруженные опции текущего блога;
- Плагины текущего блога;
- Объектный кэш текущего блога.
- Смотрите также: https://core.trac.wordpress.org/ticket/14941
Чтобы переключиться обратно к текущему блогу, используйте restore_current_blog().
Имейте в виду — restore_current_blog() отменяет только последнее переключение. Вызывать её нужно столько же раз, сколько было вызвано переключение (пусть даже на один и тот же блог). Например:
// сейчас сайт 1, переключаемся на 2 switch_to_blog( 2 ); // и еще раз switch_to_blog( 2 ); // отменим переключение restore_current_blog(); // тут мы всё равно находимся на блоге 2, нужно еще раз вызывать restore_current_blog(); // тут мы на блоге 1, на котором были изначально
Если переключаться на блог (сайт сети), на котором мы уже находимся, то функция отрабатывает моментально (полного переключения не происходит), в этом случае отрабатывает только хук switch_blog без каких-либо дополнительных операций:
switch_to_blog( 2 ); // еще одно переключение switch_to_blog( 2 );
ВАЖНАЯ ЗАМЕТКА: особенность функции, из-за которой может редиректить на переключаемый блог.
Функция устанавливает хук перенаправления на переключаемый блог на событие template_redirect.
Так, по достижении этого события (если переключение не было сброшено) произойдет перенаправление!
В каких случаях перенаправления не будет:
- Если переключение происходит после события template_redirect, например, где-то в шаблоне, потому что событие уже было (прошло).
- Если сбросить переключение на блог с помощью restore_current_blog().
- Если переключиться обратно на текущий блог с помощью той же switch_to_blog().
Эта функция влияет только на данные переключаемого сайта (переменные, база данных). Она не дает доступ к коду, классам, функциям, которые есть только на переключаемом сайте, но нет на текущем (с которого происходит переключение). Также она не переключает темы или не включает плагины, которые должны работать только на переключаемом сайте.
Хуки из функции
Возвращает
true
. Всегда возвращает true.
Использование
switch_to_blog( $new_blog, $deprecated );
- $new_blog(число) (обязательный)
- ID блога, на который нужно переключиться.
По умолчанию: текущий блог - $deprecated
- Не используется
По умолчанию: null
Примеры
#1 Одиночное переключение
Переключимся на блог 5 выведем его записи и вернемся обратно на текущий блог.
// переключаемся на блог 5 switch_to_blog( 5 ); // Выводим данные блога на который переключились // Получаем посты с блога 5 $myposts = get_posts(); foreach( $myposts as $post ){ echo esc_html( $post->post_title ) .'<br>'; } wp_reset_postdata(); // возвращемся к текущему блогу restore_current_blog();
#2 Множественное переключение
Прежде чем переключиться на другой блог, нужно сначала вернуться на текущий...
foreach( $blog_ids as $blog_id ){ switch_to_blog( $blog_id ); // обрабатываем данные блога на который переключились. restore_current_blog(); }
Если вызвать restore_current_blog() после нескольких переключений switch_to_blog(), то WordPress может получить данные из-за которых неправильно будут строится УРЛ вашего сайта.
Заметки
- Смотрите: restore_current_blog()
- Global. wpdb. $wpdb WordPress database abstraction object.
- Global. int. $blog_id
- Global. Массив. $_wp_switched_stack
- Global. true|false. $switched
- Global. Строка. $table_prefix The database table prefix.
- Global. WP_Object_Cache. $wp_object_cache
Список изменений
С версии 3.0.0 | Введена. |