Как сделать автоматический rollback обновлений WordPress при ошибках

Обновления WordPress, плагинов и тем — важный элемент поддержания безопасности и функциональности сайта. Однако иногда после обновления возникают ошибки, которые могут привести к неправильной работе сайта или даже полной недоступности. В этой статье разберём, как сделать автоматический rollback обновлений WordPress при ошибках — то есть откат к предыдущей стабильной версии без ручного вмешательства.

Почему нужен автоматический rollback обновлений WordPress

Обновления — это всегда риск. Даже если тестировать изменения на локальной копии сайта, в продакшене могут появиться конфликты с другими плагинами, темами или серверным окружением. В результате:

  • Сайт может перестать отображаться корректно.
  • Могут возникнуть фатальные ошибки PHP.
  • Некоторые функции перестанут работать.

Автоматический откат позволяет быстро вернуть рабочую версию без необходимости вмешательства администратора, что особенно актуально для сайтов с большим трафиком или без постоянного технического сопровождения.

Основные методы реализации автоматического rollback

1. Использование плагинов с функцией отката

Существует несколько плагинов, которые частично решают задачу:

  • Clearfy Pro — плагин с широким функционалом оптимизации и защиты, в том числе с возможностью управления обновлениями и откатом.
  • WP Rollback — позволяет вручную откатывать версии плагинов и тем, но автоматизации нет.

Однако для полностью автоматического отката потребуется собственная реализация.

2. Программный подход с использованием хуков обновлений

WordPress предоставляет хуки, которые можно использовать для отслеживания процесса обновления. Основная идея — после обновления проверить работу сайта (на уровне кода или через HTTP-запрос), и если обнаружена ошибка, вернуть предыдущую версию.

Для этого нужно:

  1. Перед обновлением сохранить текущую версию плагина/темы/ядра в отдельной папке (резервная копия).
  2. Запустить обновление.
  3. Проверить состояние сайта или ключевых функций.
  4. Если ошибка обнаружена — восстановить из резервной копии.

Пример реализации автоматического rollback для плагинов

Ниже приведён упрощённый пример функции, которая сохраняет резервную копию плагина перед обновлением и восстанавливает её, если после обновления сайт возвращает HTTP-код ошибки 500.

function wpbook_backup_plugin_before_update( $plugin ) {
    $plugin_dir = WP_PLUGIN_DIR . '/' . dirname( $plugin );
    $backup_dir = WP_CONTENT_DIR . '/backup_plugins/' . dirname( $plugin );
    if ( ! file_exists( $backup_dir ) ) {
        mkdir( $backup_dir, 0755, true );
    }
    // Копируем папку плагина в backup
    wpbook_copy_dir( $plugin_dir, $backup_dir );
}

function wpbook_restore_plugin_after_failed_update( $plugin ) {
    // Проверяем сайт на ошибки
    $response = wp_remote_get( home_url() );
    if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) >= 500 ) {
        $backup_dir = WP_CONTENT_DIR . '/backup_plugins/' . dirname( $plugin );
        $plugin_dir = WP_PLUGIN_DIR . '/' . dirname( $plugin );
        // Восстанавливаем папку плагина из backup
        wpbook_copy_dir( $backup_dir, $plugin_dir );
    }
}

function wpbook_copy_dir( $src, $dst ) {
    $dir = opendir( $src );
    @mkdir( $dst );
    while( false !== ( $file = readdir( $dir ) ) ) {
        if ( ( $file != '.' ) && ( $file != '..' ) ) {
            if ( is_dir( $src . '/' . $file ) ) {
                wpbook_copy_dir( $src . '/' . $file, $dst . '/' . $file );
            } else {
                copy( $src . '/' . $file, $dst . '/' . $file );
            }
        }
    }
    closedir( $dir );
}

add_action( 'upgrader_pre_install', function( $true, $hook_extra ) {
    if ( isset( $hook_extra['plugin'] ) ) {
        wpbook_backup_plugin_before_update( $hook_extra['plugin'] );
    }
    return $true;
}, 10, 2 );

add_action( 'upgrader_process_complete', function( $upgrader_object, $options ) {
    if ( $options['action'] == 'update' && $options['type'] == 'plugin' ) {
        foreach( $options['plugins'] as $plugin ) {
            wpbook_restore_plugin_after_failed_update( $plugin );
        }
    }
}, 10, 2 );

Этот код создаёт локальные резервные копии плагинов перед обновлением и проверяет сайт после обновления. Если найден сбой, происходит восстановление из резервной копии.

Особенности и рекомендации

Проверка работоспособности сайта после обновления

В примере выше проверка — простой HTTP-запрос на главную страницу. На практике лучше проводить более тонкие проверки: запросить критичные страницы, выполнить тестовые запросы к API, проверить логи ошибок.

Хранение резервных копий

Резервные копии занимают место, поэтому стоит ограничить их количество и период хранения. Можно реализовать очистку старых бэкапов по расписанию.

Совместимость с различными типами обновлений

Аналогичный подход можно применить для тем и ядра WordPress, но нужно учитывать особенности путей и процесса обновления.

Инструменты для упрощения задачи

Если хочется сократить время разработки, можно использовать готовые решения и сервисы:

  • Clearfy Pro — плагин с расширенными возможностями по контролю обновлений и безопасности, который может помочь автоматизировать откаты.
  • Плагины для автоматического создания резервных копий, такие как UpdraftPlus или BackWPup, которые можно комбинировать с кастомной логикой.

Заключение

Автоматический rollback обновлений — полезная функция для обеспечения стабильности WordPress-сайта. Реализовать её можно как с помощью готовых плагинов, так и программно, используя хуки обновления. Важно тщательно тестировать механизм и адаптировать под специфику конкретного проекта, чтобы минимизировать простой сайта и потери данных.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическую защиту от спама на формы WordPress без CAPTCHA
11.12.2025
Как создать автоматический импорт данных из Excel в WordPress
05.03.2026
Как добавить мультиязычность в WooCommerce без плагинов
26.04.2026
Как автоматизировать удаление неактивных пользователей в WordPress
15.05.2026
Как автоматически удалять товар из WooCommerce после первого заказа
06.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее