Обновления плагинов, тем и самого ядра WordPress важны для безопасности и функциональности, но иногда новые версии вызывают ошибки и сбои на сайте. В таких случаях автоматический откат (rollback) обновления до предыдущей стабильной версии помогает быстро вернуть сайт в рабочее состояние без длительного простоя и сложной ручной работы.
Почему нужен автоматический rollback обновлений в WordPress
Обновления могут привести к конфликтам с другими плагинами, несовместимости с темой или к ошибкам PHP. Если вы не заметите проблему сразу, ваш сайт может быть недоступен для пользователей, а устранение вручную потребует времени и доступа по FTP.
Автоматический rollback позволяет:
- Сэкономить время на восстановление после сбоя.
- Избежать убытков и потери посетителей.
- Обеспечить стабильность работы сайта без постоянного мониторинга.
В этой статье рассмотрим, как реализовать автоматический откат обновлений с помощью плагинов и собственного кода.
Использование плагинов для автоматического отката обновлений
Плагин WP Rollback
WP Rollback — один из самых популярных плагинов для ручного отката версий плагинов и тем. Однако он не автоматизирует процесс. Для автоматического rollback подойдет расширение или кастомизация.
Плагин Easy Updates Manager
Easy Updates Manager позволяет гибко настраивать автоматические обновления, но не имеет встроенного rollback. Можно настроить уведомления и выполнять rollback вручную при проблемах.
Плагин с автоматическим откатом — решение на базе Code Monitor и GitHub
Сложные решения используют мониторинг ошибок и откат обновлений через Git. Например, можно настроить webhook, который при обнаружении критической ошибки откатит обновление.
Реализация автоматического rollback обновлений через код
Обработка ошибок после обновления плагина или темы
Для начала нам нужно отследить, когда происходит обновление, и проверить работоспособность сайта. Если после обновления фиксируются ошибки, автоматически возвращаем предыдущую версию.
Пример функции с префиксом wpbook для обработки обновлений плагина:
function wpbook_rollback_plugin_update($plugin) {
// Путь к каталогу плагина
$plugin_dir = WP_PLUGIN_DIR . '/' . dirname($plugin);
// Путь к резервной копии
$backup_dir = WP_CONTENT_DIR . '/plugin-backups/' . dirname($plugin);
// Проверяем наличие резервной копии
if (!file_exists($backup_dir)) {
return;
}
// Проверяем работоспособность сайта или плагина (например, через curl или тестовый запрос)
$site_works = wpbook_check_site_health();
if (!$site_works) {
// Копируем файлы из резервной копии обратно
wpbook_copy_dir($backup_dir, $plugin_dir);
error_log('Автоматический rollback плагина ' . $plugin . ' выполнен из-за ошибки после обновления.');
}
}Далее нужно реализовать wpbook_check_site_health() — функцию проверки доступности сайта и основных функций, а также wpbook_copy_dir() — функцию копирования файлов из резервной копии.
Как сделать резервные копии плагинов автоматически перед обновлением
Чтобы rollback работал, нужно заранее сохранять копии плагинов и тем. Реализуем функцию, которая копирует папку плагина перед обновлением:
function wpbook_backup_plugin_before_update($plugin) {
$plugin_dir = WP_PLUGIN_DIR . '/' . dirname($plugin);
$backup_dir = WP_CONTENT_DIR . '/plugin-backups/' . dirname($plugin);
// Создаем папку для резервных копий, если нет
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
// Копируем файлы
wpbook_copy_dir($plugin_dir, $backup_dir);
}Используем хуки WordPress, чтобы вызвать эту функцию перед обновлением:
add_action('upgrader_pre_install', function($true, $hook_extra) {
if (!empty($hook_extra['plugin'])) {
wpbook_backup_plugin_before_update($hook_extra['plugin']);
} elseif (!empty($hook_extra['theme'])) {
// Аналогично для тем
}
return $true;
}, 10, 2);Вспомогательные функции копирования и проверки
Пример функции рекурсивного копирования папок:
function wpbook_copy_dir($src, $dst) {
$dir = opendir($src);
@mkdir($dst, 0755, true);
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);
}Пример простой проверки здоровья сайта — запрос главной страницы и анализ ответа:
function wpbook_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);
}Интеграция с плагинами WPShop
Для удобства мониторинга и уведомлений можно использовать плагин WPCommunity, который позволяет настроить оповещения о проблемах сайта и логах обновлений.
Также полезен плагин Clearfy Pro для оптимизации и защиты сайта, который может помочь предотвратить сбои при обновлениях.
Практические рекомендации для автоматического rollback
1. Всегда делайте резервные копии плагинов и тем перед обновлением.
2. Настройте мониторинг работоспособности сайта после обновлений.
3. Автоматизируйте копирование резервных копий и проверку через хуки WordPress.
4. При обнаружении ошибок сразу выполняйте откат, чтобы минимизировать простой.
5. Тестируйте обновления на staging-сервере перед автоматическим обновлением на продакшене.