Функция позволяет переключиться на определённый сайт сети WordPress Мультисайт и продолжить работу с его базой данных в коде.
Объясню. Допустим, на Сайте 1 сети вы хотите вывести посты с Сайта 2. Это можно сделать той же функцией get_posts(), но для начала мы переключимся на Сайт 2 функцией switch_to_blog()
. Окей, я думаю, лучше всего это лучше показать на примере.
switch_to_blog( $new_blog_id, $deprecated = null )
Возвращает true
в любых ситуациях.
Параметры
- $new_blog_id
- (целое) ID сайта сети WordPress Мультисайт, на который нужно переключиться. Обратите внимание, что функция не проверяет, если указанный сайт существует внутри сети.
- $deprecated
- Параметр больше не используется, оставлен для обратной совместимости.
Примеры
1. Получаем и выводим посты с другого сайта
// предположим, что сначала мы работаем на сайте 1 и выводим 5 его постов $site1_posts = get_posts( array( 'posts_per_page' => 5 ) ); // ... допустим тут их выводим // затем впоследствии нам нужно вывести ещё и 5 постов второго сайта // тогда сначала переключаемся на него switch_to_blog( $site2_id ); // получаем посты второго сайта $site2_posts = get_posts( array( 'posts_per_page' => 5 ) ); // ... допустим тут их выводим //и возвращаемся на предыдущий сайт restore_current_blog();
2. Использование функций и классов других сайтов сети
Однако очень важно обратить внимание на один момент, вскользь я его уже упоминал выше. Переключение на другой сайт функцией switch_to_blog()
оказывает действие только на базу данных, то есть по сути подменяется префикс, но никак не делает доступными функции плагинов и темы второго сайта например.
К примеру:
// переключаемся на другой сайт сети switch_to_blog( $site_2 ); // тут мы можем попытаться воспользоваться функциями, которые доступны только на сайте 2 site_2_function(); // получим ошибку 500
Однако, если мы воспользуемся функциями ядра WordPress, например функцией get_option() для получения какой-то настройки второго сайта, то всё будет работать прекрасно:
switch_to_blog( $site_2 ); $option = get_option( 'опция-сайта-2' ); restore_current_blog();
3. Использование за пределами WordPress
В том случае, если вы захотите использовать функцию switch_to_blog()
за пределами WordPress, то вам необходимо также задать глобальную переменную $switched
. К примеру, если вы этого не сделаете, то в примере ниже пост будет создаваться не на том сайте сети, на котором вы бы хотели.
require_once 'wp-load.php'; global $switched; // переключаемся на сайт с ID=2 и на нём и будем создавать новый пост switch_to_blog( 2 ); // создаём пост программно wp_insert_post( array( 'post_author' => 1, 'post_status' => 'publish', 'post_type' => 'post', 'post_content' => 'Какой-то произвольный контент можно добавить сюда', 'post_title' => 'Привет, Миша!' ) );