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

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

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

Обычно WordPress обновляет плагины и темы автоматически или по команде администратора. Если после обновления возникает ошибка — например, из-за несовместимости версии PHP, конфликтов с другими плагинами или багов в обновлённой версии — сайт может перестать работать.

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

Реализовать автоматический откат можно как с помощью плагинов, так и собственными средствами — через хуки WordPress и пользовательский код.

Обзор плагинов для автоматического отката обновлений

1. WP Rollback

Плагин WP Rollback позволяет вручную откатить обновления плагинов и тем к предыдущим версиям через админку. Он не автоматизирует процесс, но облегчает ручной откат.

2. Easy Updates Manager

Easy Updates Manager помогает гибко настраивать автоматические обновления и уведомления. В сочетании с мониторингом ошибок можно настроить частичный откат вручную.

3. WP Downgrade

Плагин WP Downgrade позволяет переключаться на выбранные версии WordPress, тем и плагинов, что полезно при необходимости отката.

Однако полностью автоматического отката с этими плагинами нет — их нужно использовать в комплексе с мониторингом и пользовательским кодом.

Как реализовать автоматический откат обновлений с помощью кода

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

Пример функции для автоматического отката обновления плагина при ошибке:

function wordpressa_rollback_on_update_error($upgrader_object, $options) {
    // Проверяем, что это обновление плагина
    if ($options['action'] === 'update' && $options['type'] === 'plugin') {
        $plugin = $options['plugins'][0]; // обновляемый плагин

        // Здесь добавьте проверку ошибок, например, доступность сайта, логи и т.п.
        $site_works = wordpressa_check_site_health();

        if (!$site_works) {
            // Если сайт не работает — откатываем плагин
            wordpressa_rollback_plugin($plugin);
        }
    }
}
add_action('upgrader_process_complete', 'wordpressa_rollback_on_update_error', 10, 2);

Функция проверки работоспособности сайта

Эта функция должна возвращать true, если сайт работает нормально, и false при ошибках. Для примера можно сделать простой HTTP-запрос к главной странице:

function wordpressa_check_site_health() {
    $response = wp_remote_get(home_url());
    if (is_wp_error($response)) {
        return false;
    }
    $code = wp_remote_retrieve_response_code($response);
    return ($code >= 200 && $code < 400);
}

Функция отката плагина

Для отката можно скачать предыдущую версию плагина из репозитория WordPress и заменить файлы, либо использовать WP-CLI через PHP (если есть доступ). Ниже пример упрощённой функции:

function wordpressa_rollback_plugin($plugin_file) {
    // Путь к каталогу плагина
    $plugin_dir = WP_PLUGIN_DIR . '/' . dirname($plugin_file);

    // URL предыдущей версии плагина в репозитории (пример, нужно заменить на реальный)
    $rollback_url = 'https://downloads.wordpress.org/plugin/' . basename($plugin_dir) . '.zip';

    // Скачиваем архив
    $tmp_file = download_url($rollback_url);
    if (is_wp_error($tmp_file)) {
        error_log('Rollback: ошибка скачивания архива');
        return false;
    }

    // Распаковываем архив
    $result = unzip_file($tmp_file, WP_PLUGIN_DIR);
    @unlink($tmp_file);
    if (is_wp_error($result)) {
        error_log('Rollback: ошибка распаковки архива');
        return false;
    }

    // Можно добавить очистку кэша, деактивацию и повторную активацию плагина
    error_log('Rollback: плагин откатан');
    return true;
}

Рекомендации по интеграции автоматического отката

1. Тестируйте обновления на staging-сервере, чтобы минимизировать риск ошибок на живом сайте.

2. Ведите логи обновлений и ошибок, чтобы отследить причины сбоев и быстро реагировать.

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

4. Комбинируйте автоматический откат с уведомлениями — администратор должен знать о проблемах и причинах отката.

Пример расширенного решения с уведомлением и логированием

Добавим уведомление по email и запись в лог при срабатывании отката:

function wordpressa_rollback_on_update_error($upgrader_object, $options) {
    if ($options['action'] === 'update' && $options['type'] === 'plugin') {
        $plugin = $options['plugins'][0];
        $site_works = wordpressa_check_site_health();
        if (!$site_works) {
            $result = wordpressa_rollback_plugin($plugin);
            if ($result) {
                error_log('Rollback выполнен для плагина: ' . $plugin);
                wp_mail(get_option('admin_email'), 'Откат обновления плагина', "Обновление плагина $plugin вызвало ошибку. Выполнен откат.");
            } else {
                error_log('Rollback не удалось для плагина: ' . $plugin);
                wp_mail(get_option('admin_email'), 'Ошибка отката обновления плагина', "Не удалось откатить обновление плагина $plugin.");
            }
        }
    }
}
add_action('upgrader_process_complete', 'wordpressa_rollback_on_update_error', 10, 2);

Выводы и советы

Автоматический откат обновлений — мощный инструмент для повышения стабильности сайта на WordPress. Однако важно помнить, что он не заменяет тщательное тестирование и резервное копирование. Используйте описанные методы в комплексе с грамотным администрированием и мониторингом.

Если вы хотите упростить работу с обновлениями и откатами, обратите внимание на плагины из каталога WPShop — они помогут настроить процесс удобнее и безопаснее.

Как удалить пустые категории в WordPress с помощью кода
12.03.2026
WooCommerce: как правильно отменять и возвращать заказы после оплаты
01.06.2026
Как создать автозадачу в WordPress без использования WP-Cron
04.04.2026
Как использовать WPCommunity для создания сообщества на WordPress
15.03.2026
Как удалить неактивных пользователей из базы данных WordPress
20.02.2026