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() .
Ця функція впливає тільки на дані сайту, що перемикається (змінні, база даних). Вона не дає доступ до коду, класів, функцій, які є тільки на сайті, що перемикається, але немає на поточному (з якого відбувається перемикання). Також вона не перемикаємо теми або не включає плагіни, які повинні працювати тільки на сайті, що перемикається.
(повільно) | 50000 разів – 5.201680 сек
(швидко) |
PHP 7.4.8, WP 5.7.2
Хуки з функції
Повертає
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
- Global. WP_Object_Cache. $wp_object_cache
список змін
З версії 3.0.0 | Введено. |