Проблемы с плагинами — одна из самых частых причин сбоев и ошибок на сайтах WordPress. Особенно неприятно, когда ошибка вызывает белый экран смерти (WSOD) или критическую ошибку, из-за которой сайт становится недоступен. В таких ситуациях полезно иметь механизм, который автоматически выявляет и отключает проблемные плагины, позволяя вовремя восстановить работоспособность сайта без ручного вмешательства.
Почему важно автоматически отключать проблемные плагины
Плагины значительно расширяют возможности WordPress, но иногда они несовместимы с другими расширениями, темами или ядром CMS, особенно после обновлений. Если ошибка не устранена быстро, это приводит к простоям сайта, потере посетителей и ухудшению SEO. Ручное отключение требует доступа к админке или FTP, что не всегда удобно.
Автоматизация отключения плагинов при обнаружении критических PHP ошибок или фатальных ошибок позволяет:
- Минимизировать время простоя сайта.
- Сохранить доступ к админке и возможность диагностики.
- Автоматизировать мониторинг состояния сайта.
Какие ошибки можно отслеживать для отключения плагинов
Типичные ошибки, которые вызывают сбои из-за плагинов:
- Fatal error — критические ошибки, например, вызов несуществующих функций или конфликт классов.
- Parse error — синтаксические ошибки в коде плагина.
- Deprecated warnings — устаревшие функции, которые могут ломать сайт при обновлении PHP.
- Memory limit errors — превышение лимита памяти из-за ресурсоемких плагинов.
Важно отслеживать именно фатальные и критические ошибки, которые делают сайт недоступным.
Как реализовать автоматическое отключение плагинов на PHP
В WordPress есть несколько полезных хуков и функций, которые позволят отследить ошибки и программно отключить плагин.
Пример пользовательской функции для отключения плагина
function wpkit_deactivate_plugin_on_error($plugin_file) {
if ( !function_exists('deactivate_plugins') ) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
deactivate_plugins($plugin_file);
error_log('Plugin ' . $plugin_file . ' deactivated automatically due to error.');
}
Эта функция отключает плагин по его пути и записывает в лог.
Отслеживание критических ошибок с помощью shutdown hook
Можно использовать хук shutdown и функцию error_get_last(), чтобы определить, была ли фатальная ошибка, и найти виновника:
add_action('shutdown', 'wpkit_check_fatal_error_and_deactivate_plugin');
function wpkit_check_fatal_error_and_deactivate_plugin() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE])) {
// Здесь потребуется логика для определения плагина-источника
// Например, можно проанализировать трассировку или сообщение ошибки
$plugin_to_deactivate = 'example-plugin/example-plugin.php';
wpkit_deactivate_plugin_on_error($plugin_to_deactivate);
}
}
Такой подход требует дополнительной настройки для корректного определения проблемного плагина.
Использование плагинов для автоматического отключения проблемных плагинов
Если не хочется писать код с нуля, можно использовать готовые решения:
- WP Rollback — позволяет быстро откатывать плагины до рабочей версии, что помогает при ошибках.
- Health Check & Troubleshooting — проверяет совместимость плагинов и тем, помогает выявить проблемные компоненты.
- Fatal Error Notify — уведомляет админа о критических ошибках, после чего можно быстро отключить плагин вручную.
Однако автоматическое отключение именно в момент ошибки встречается редко, поэтому кастомный код или доработка плагинов — лучший вариант.
Советы по улучшению автоматизации и мониторинга
Чтобы сделать процесс автоматического отключения плагинов надежным, рекомендуем:
- Внедрить централизованный лог ошибок с уведомлениями (например, через плагин WPCommunity для уведомлений).
- Регулярно тестировать обновления плагинов в тестовом окружении.
- Использовать
WP_DEBUG_LOGдля отлова ошибок и записи в лог-файл. - Реализовать резервное копирование перед обновлением плагинов, например, с помощью Clearfy Pro.
Пример расширенного кода для автоматического отключения плагина при ошибках
Ниже пример более сложной реализации, которая ищет имя плагина в сообщении об ошибке и отключает его:
add_action('shutdown', 'wpkit_auto_deactivate_faulty_plugin');
function wpkit_auto_deactivate_faulty_plugin() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE])) {
$message = $error['message'];
$plugins = get_plugins();
foreach ($plugins as $path => $plugin) {
if (stripos($message, $plugin['Name']) !== false) {
wpkit_deactivate_plugin_on_error($path);
break;
}
}
}
}
Этот код автоматически проверяет, упоминается ли имя плагина в сообщении об ошибке, и отключает соответствующий плагин.
Заключение
Автоматическое отключение плагинов при ошибках — полезный механизм для стабилизации работы сайта WordPress. Хотя готовых решений в виде плагинов немного, кастомные скрипты с использованием хуков shutdown и анализа ошибок позволяют реализовать такую функциональность. Для комплексного мониторинга и автоматизации рекомендуем дополнительно использовать плагины для логирования, уведомлений и резервного копирования, например, WPCommunity и Clearfy Pro.