switch_to_blog()

Функция позволяет переключиться на определённый сайт сети 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'    => 'Привет, Миша!'
	)
);

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал