Восстановление текущего блога с помощью функции RESTORE_CURRENT_BLOG() – WordPress SEO

Восстановление текущего блога с помощью функции 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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *