Обновления плагинов и тем в WordPress необходимы для безопасности и новых функций, но иногда после обновления сайт начинает работать некорректно или вовсе перестаёт загружаться. В таких случаях очень полезно иметь механизм автоматического отката (rollback) обновлений до предыдущей стабильной версии. В этой статье мы разберём, как реализовать автоматический откат обновлений в WordPress с помощью кода и популярных плагинов.
Почему важен автоматический rollback обновлений
Обновления часто вызывают конфликты с другими плагинами, темами или кастомными функциями. Особенно это критично на живых сайтах, где простой влияет на бизнес. Автоматический rollback позволяет:
- Снизить время простоя сайта;
- Избежать вмешательства разработчиков на первых этапах;
- Сохранить пользовательский опыт без сбоев.
Конечно, для полноценной защиты нужен бэкап, но rollback существенно облегчает работу с обновлениями.
Обзор плагинов для отката обновлений WordPress
Плагин WP Rollback
Один из самых популярных плагинов для отката версий плагинов и тем. Позволяет вручную выбрать нужную версию и откатить обновление. Но автоматического rollback он не даёт.
Скачать: https://wordpress.org/plugins/wp-rollback/
Плагин Clearfy Pro
Clearfy Pro содержит модуль для контроля обновлений с возможностью отключения автообновлений и управлением версиями. В связке с кастомным кодом можно реализовать автоматический откат.
Подробнее: https://wpshop.ru/clearfy-pro/
Как реализовать автоматический rollback обновлений своими силами
Для реализации автоматического отката нужно:
- Отслеживать обновление плагина или темы;
- Проверять сайт на ошибки после обновления;
- Если ошибки есть — откатывать обновление к предыдущей версии.
Отслеживание обновлений
WordPress генерирует события при обновлениях. Можно использовать хук upgrader_process_complete, чтобы отследить успешное обновление плагина или темы.
add_action('upgrader_process_complete', 'wptips_rollback_check_update', 10, 2);
function wptips_rollback_check_update($upgrader_object, $options) {
if ($options['action'] == 'update' && ($options['type'] == 'plugin' || $options['type'] == 'theme')) {
$item = reset($options['plugins'] ?? $options['themes']);
// Здесь можно запустить проверку работоспособности сайта
wptips_rollback_verify_and_rollback($options['type'], $item);
}
}
Проверка работоспособности сайта
Проверку можно делать по-разному: запускать HTTP-запрос к главной странице и смотреть код ответа, проверять наличие PHP ошибок в логах или использовать тестовые запросы к REST API.
Пример простой проверки HTTP-кода:
function wptips_rollback_verify_and_rollback($type, $item) {
$response = wp_remote_get(home_url());
if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) {
// Ошибка после обновления, запускаем откат
wptips_rollback($type, $item);
}
}
Функция отката обновления
Для отката потребуется скачать предыдущую версию плагина или темы и заменить текущие файлы. Источник — официальный репозиторий WordPress или локальный архив.
Пример упрощённой функции:
function wptips_rollback($type, $slug) {
// Для плагина $slug это путь вида "plugin-folder/plugin-file.php"
// Для темы - название темы
if ($type === 'plugin') {
// Получить текущую версию плагина
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $slug);
$current_version = $plugin_data['Version'];
// Предположим, скачиваем предыдущую версию из репозитория WordPress
$previous_version = wptips_find_previous_version($slug, $current_version);
if (!$previous_version) return;
$package_url = wptips_get_plugin_package_url($slug, $previous_version);
// Скачать и распаковать
wptips_download_and_replace($package_url, WP_PLUGIN_DIR . '/' . dirname($slug));
} elseif ($type === 'theme') {
// Аналогично для темы
}
}
function wptips_find_previous_version($slug, $current_version) {
// Логика поиска предыдущей версии (через API WordPress или заранее сохранённые архивы)
return '1.2.3'; // пример
}
function wptips_get_plugin_package_url($slug, $version) {
return "https://downloads.wordpress.org/plugin/" . dirname($slug) . ".{$version}.zip";
}
function wptips_download_and_replace($url, $dest_dir) {
// Скачать архив
$tmp_file = download_url($url);
if (is_wp_error($tmp_file)) return false;
// Распаковать и заменить
$result = unzip_file($tmp_file, $dest_dir);
@unlink($tmp_file);
return $result;
}
Практические рекомендации по использованию rollback
Хранение резервных версий
Для автоматического отката желательно иметь локальный архив предыдущих версий плагинов и тем, чтобы быстро возвращать их без загрузки с интернета. Это ускорит процесс и снизит риски.
Мониторинг ошибок
Автоматический rollback стоит запускать только при явных ошибках: 500 ошибка, белый экран, недоступность сайта. Для этого нужно настроить мониторинг статуса HTTP и логов.
Обновление с тестированием
Рекомендуется использовать staging-среду, где сначала обновляются плагины и темы с последующим тестированием. В случае успеха — обновлять боевой сайт. Автоматический rollback — дополнительная страховка.
Интеграция с WP GPT для уведомлений об откате
Если вы используете плагин WP GPT, можно настроить автоматическое уведомление администратора с помощью AI-бота о случившемся rollback с рекомендациями по дальнейшим действиям. Это оптимизирует поддержку сайта и ускорит реакцию.
Пример вызова функции уведомления:
function wptips_notify_admin_about_rollback($plugin_slug, $version) {
$message = "Автоматический откат обновления плагина {$plugin_slug} к версии {$version} был выполнен из-за ошибки на сайте.";
// Вызов API WP GPT для отправки уведомления
WP_GPT_send_message_to_admin($message);
}