Функция switch_to_blog()
в WordPress позволяет переключаться на другой сайт в сети мультисайтов. Это полезно, когда необходимо получить данные, такие как записи или настройки, из другого сайта сети. После завершения работы с переключенным сайтом важно использовать функцию restore_current_blog()
, чтобы вернуться к исходному сайту и избежать непредсказуемого поведения.
switch_to_blog( int $new_blog_id, bool $deprecated = null ): bool
Параметры:
$new_blog_id
(int) — ID сайта, на который нужно переключиться. Этот параметр обязателен.$deprecated
(bool, optional) — Устаревший параметр, который не используется.
Возвращаемое значение:
- Всегда возвращает
true
.
Функция работает только с данными сайта (базой данных), но не переключает загруженные плагины, темы и прочие элементы кода, которые активны только на текущем сайте.
Пример 1. Одиночное переключение на другой сайт для вывода записей
В этом примере мы переключаемся на сайт с ID 5
, выводим заголовки его записей и затем возвращаемся к исходному сайту.
// Переключаемся на сайт 5
switch_to_blog( 5 );
// Получаем и выводим заголовки постов с сайта 5
$posts = get_posts();
foreach ( $posts as $post ) {
echo esc_html( $post->post_title ) . '<br>';
}
wp_reset_postdata();
// Возвращаемся на исходный сайт
restore_current_blog();
Пример 2. Множественное переключение между несколькими сайтами
Когда необходимо обработать данные с нескольких сайтов, можно использовать switch_to_blog()
в цикле, переключаясь на каждый сайт поочередно и обязательно возвращаясь к исходному сайту после каждой итерации.
$site_ids = [2, 3, 4]; // Список ID сайтов
foreach ( $site_ids as $site_id ) {
switch_to_blog( $site_id );
// Получаем и выводим основную информацию о каждом сайте
$site_name = get_option('blogname');
echo 'Сайт: ' . esc_html($site_name) . '<br>';
// Возвращаемся на исходный сайт
restore_current_blog();
}
Пример 3. Изменение настроек только для определенного сайта
Иногда требуется изменить настройки только для одного из сайтов. В этом случае также можно использовать switch_to_blog()
:
$specific_site_id = 3;
// Переключаемся на сайт с ID 3
switch_to_blog( $specific_site_id );
// Обновляем настройку сайта
update_option( 'custom_setting', 'новое значение' );
// Возвращаемся на исходный сайт
restore_current_blog();
Пример 4. Доступ к значению опции, сохраненной на другом сайте
Если на другом сайте сохраняется важное значение в опциях, switch_to_blog()
позволяет получить его:
$source_site_id = 6;
// Переключаемся на сайт с ID 6
switch_to_blog( $source_site_id );
// Получаем значение опции
$custom_option_value = get_option( 'important_option' );
// Возвращаемся на исходный сайт
restore_current_blog();
// Используем полученное значение
echo 'Полученное значение: ' . esc_html($custom_option_value);
Важные замечания
- Не забывайте вызывать
restore_current_blog()
после каждого вызоваswitch_to_blog()
. Иначе это может привести к неожиданному поведению и сбоям. - Функция переключает только данные сайта, а не плагины или темы, которые могут быть специфичными для переключаемого сайта.
switch_to_blog()
не проверяет существование сайта по указанному ID. Поэтому лучше заранее убедиться, что ID правильный, чтобы избежать ошибок.
Заключение
Функция switch_to_blog()
— незаменимый инструмент для работы с данными из разных сайтов в мультисайтовой сети WordPress.