Проблема: почему нужно отключать плагины после обновлений
В процессе обновления WordPress или плагинов иногда возникают конфликты, которые приводят к сбоям в работе сайта. Автоматическое отключение плагинов после обновления позволяет предотвратить критические ошибки и быстро локализовать проблемный элемент, особенно на больших проектах с множеством расширений. Это актуально для разработчиков, системных администраторов и владельцев сайтов с частыми обновлениями.
Диагностика проблемы с обновлениями плагинов
Чтобы понять, что проблема именно в плагинах после обновления, выполните следующие действия:
- Включите режим отладки WordPress в
wp-config.php:define('WP_DEBUG', true);иdefine('WP_DEBUG_LOG', true); - Проверьте файл
wp-content/debug.logна ошибки после обновления - Отключите все плагины вручную и поочерёдно включайте их, чтобы выявить конфликтный
- Проверьте логи сервера и ошибки PHP
Если после обновления сайт падает или появляются ошибки, автоматическое отключение плагинов поможет быстро восстановить работу.
Пошаговое решение: автоматическое отключение плагинов после обновления
WordPress не предоставляет стандартного хука для автоматического отключения плагинов сразу после обновления, но можно реализовать этот механизм через хук upgrader_process_complete. Ниже пример кода, который автоматически отключит указанные плагины после обновления любого плагина или самого ядра.
add_action('upgrader_process_complete', 'auto_deactivate_plugins_after_update', 10, 2);
function auto_deactivate_plugins_after_update($upgrader_object, $options) {
// Проверяем, что обновление - плагин или ядро
if ($options['action'] == 'update' && in_array($options['type'], ['plugin', 'core'])) {
// Список плагинов для автоотключения после обновления
$plugins_to_deactivate = [
'akismet/akismet.php',
'contact-form-7/wp-contact-form-7.php',
// Добавьте свои плагины в формате 'папка/файл.php'
];
deactivate_plugins($plugins_to_deactivate);
// Логируем для диагностики
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('Автоматическое отключение плагинов после обновления: ' . implode(', ', $plugins_to_deactivate));
}
}
}
Этот код добавьте в functions.php вашей темы или в кастомный плагин. Он сработает каждый раз после обновления ядра или любого плагина.
Расширение: уведомление администратора
Чтобы администратор получал уведомление о выполненном отключении, добавим отправку письма:
add_action('upgrader_process_complete', 'notify_admin_on_plugins_deactivation', 11, 2);
function notify_admin_on_plugins_deactivation($upgrader_object, $options) {
if ($options['action'] == 'update' && in_array($options['type'], ['plugin', 'core'])) {
$plugins = [
'akismet/akismet.php',
'contact-form-7/wp-contact-form-7.php',
];
$admin_email = get_option('admin_email');
$subject = 'Плагины автоматически отключены после обновления';
$message = 'После обновления WordPress автоматически отключены следующие плагины: ' . implode(', ', $plugins);
wp_mail($admin_email, $subject, $message);
}
}
Проверка результата после внедрения
Чтобы проверить, что автоматическое отключение работает:
- Обновите один из указанных плагинов (или само ядро WordPress) через админку
- После обновления зайдите в раздел "Плагины" и убедитесь, что указанные плагины отключены
- Проверьте файл
wp-content/debug.logна записи об отключении - Проверьте почту администратора на уведомление, если добавляли уведомление
Если плагины отключены автоматически, значит решение работает корректно.
Частые ошибки и как их исправить
- Плагины не отключаются после обновления: Проверьте, правильно ли указан путь к плагину в массиве
$plugins_to_deactivate. Путь должен соответствовать структуре папок плагина, например,folder/plugin-file.php. - Код не срабатывает: Убедитесь, что хук
upgrader_process_completeдобавлен с приоритетом не ниже 10 и функция подключена вfunctions.phpили кастомном плагине, который активен. - Письма не отправляются: Проверьте настройки почты на сервере и работу функции
wp_mail. Для отладки можно временно заменить наerror_log. - Конфликты с другими плагинами управления обновлениями: Если используете плагины для автоматизации обновлений, проверьте их настройки, чтобы они не блокировали хук.
Практические советы по безопасности и производительности
- Не отключайте массово все плагины — выбирайте только те, которые могут вызвать проблемы после обновления
- Реализуйте логи ошибок и уведомления, чтобы оперативно реагировать на проблемы
- Если используете автоматическое обновление, интегрируйте механизм отката (rollback) обновления для критических плагинов
- Регулярно тестируйте обновления на staging-сервере перед применением на продакшене
- Для крупных проектов рассмотрите использование специализированных инструментов для управления обновлениями и зависимостями, например, Composer или WP-CLI скрипты
Сравнение методов автоматического отключения плагинов
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
Код на хуке upgrader_process_complete | Полный контроль, без сторонних плагинов | Требует знаний PHP, возможны ошибки в путях | Использовать вместе с логированием и уведомлениями |
| Плагины автоконтроля обновлений (например, WP Rollback) | Удобный UI, поддержка отката | Дополнительная нагрузка, возможны конфликты | Использовать на больших проектах с тестированием |
| Автоматические скрипты WP-CLI | Высокая гибкость, автоматизация CI/CD | Требует серверного доступа и знаний командной строки | Подходит для продвинутых пользователей |