Восстановление текущего блога с помощью функции RESTORE_CURRENT_BLOG()
Функция RESTORE_CURRENT_BLOG() используется для возврата к текущему блогу после вызова функции switch_to_blog(). Эта функция полезна в сетевых установках WordPress, когда вы работаете с несколькими блогами.
Время выполнения
- 1 раз — 0.001188 секунды (очень медленно)
- 50000 раз — 0.059483 секунды (световая скорость)
Хуки функции
switch_blog- используется для обработки переключения между блогами.
Возвращаемое значение
true— Если функция выполнена успешно.false— Если вы уже находитесь на текущем блоге.
Использование
Чтобы использовать эту функцию, вызовите:
restore_current_blog();
Пример использования
Представим, что вы хотите вернуться к текущему блогу после переключения на другой:
// Переключаемся на блог с ID 5
switch_to_blog(5);
// Получаем посты из блога с ID 5
$myposts = get_posts();
foreach ($myposts as $post) {
echo esc_html($post->post_title) . '
';
}
wp_reset_postdata();
// Возвращаемся к текущему блогу
restore_current_blog();
Важные заметки
- Функция
switch_to_blog()используется для переключения между блогами. Обратите внимание, что перед вызовомrestore_current_blog()необходимо сначала вызватьswitch_to_blog(). - Глобальные переменные:
$wpdb— объект абстракции базы данных WordPress.$_wp_switched_stack— массив, который хранит информацию о переключении между блогами.$blog_id— ID текущего блога.$switched— логическое значение, которое указывает, находимся ли мы на переключенном блоге.$table_prefix— префикс таблиц базы данных.$wp_object_cache— объект кэширования.
Изменения
- Функция была представлена в версии 3.0.0 WordPress.
Код функции RESTORE_CURRENT_BLOG() (для разработчиков)
Вот код функции, которая используется для восстановления текущего блога:
function restore_current_blog() {
global $wpdb;
if (empty($GLOBALS['_wp_switched_stack'])) {
return false;
}
$new_blog_id = array_pop($GLOBALS['_wp_switched_stack']);
$prev_blog_id = get_current_blog_id();
if ($new_blog_id === $prev_blog_id) {
// Этот фильтр документирован в wp-includes/ms-blogs.php
do_action('switch_blog', $new_blog_id, $prev_blog_id, 'restore');
// Если в стеке переключения остались элементы, продолжаем считать себя 'переключёнными'.
$GLOBALS['switched'] = !empty($GLOBALS['_wp_switched_stack']);
return true;
}
$wpdb->set_blog_id($new_blog_id);
$GLOBALS['blog_id'] = $new_blog_id;
$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();
if (function_exists('wp_cache_switch_to_blog')) {
wp_cache_switch_to_blog($new_blog_id);
} else {
global $wp_object_cache;
if (is_object($wp_object_cache) && isset($wp_object_cache->global_groups)) {
$global_groups = $wp_object_cache->global_groups;
} else {
$global_groups = false;
}
wp_cache_init();
if (function_exists('wp_cache_add_global_groups')) {
if (is_array($global_groups)) {
wp_cache_add_global_groups($global_groups);
} else {
wp_cache_add_global_groups(array(
'blog-details',
'blog-id-cache',
'blog-lookup',
'blog_meta',
'global-posts',
'image_editor',
'networks',
'network-queries',
'sites',
'site-details',
'site-options',
'site-queries',
'site-transient',
'theme_files',
'rss',
'users',
'user-queries',
'user_meta',
'useremail',
'userlogins',
'userslugs',
));
}
wp_cache_add_non_persistent_groups(array('counts', 'plugins', 'theme_json'));
}
}
// Этот фильтр документирован в wp-includes/ms-blogs.php
do_action('switch_blog', $new_blog_id, $prev_blog_id, 'restore');
// Если в стеке переключения остались элементы, продолжаем считать себя 'переключёнными'.
$GLOBALS['switched'] = !empty($GLOBALS['_wp_switched_stack']);
return true;
}
Связанные функции
В контексте многосайтовых установок также полезно знать о следующих функциях:
get_blog_details()— получение информации о блоге.get_current_blog_id()— получение ID текущего блога.is_multisite()— проверка, является ли ваша установка многосайтовой.
Эти функции помогут вам лучше управлять и взаимодействовать с многими блогами в одной установке WordPress.