WordPress — мощная CMS, но иногда плагины могут вызывать критические ошибки, которые приводят к недоступности сайта. Особенно это актуально, если у вас много плагинов и нет времени быстро разбираться, какой из них сломался. В этой статье мы разберем, как можно автоматизировать процесс отключения проблемных плагинов при возникновении фатальных ошибок. Это поможет минимизировать время простоя сайта и быстро вернуть его работу.
Почему важно автоматическое отключение плагинов при ошибках
Когда на сайте появляется белый экран смерти (WSOD) или критическая ошибка PHP, нередко причина — конфликт или ошибка в одном из плагинов. Если вручную отключать плагины через админку невозможно (из-за ошибки), приходится заходить в FTP или базу данных, что неудобно и долго.
Автоматизация отключения позволяет WordPress самому выявить и отключить проблемный плагин, обеспечив возвращение сайта в рабочее состояние. Так вы сможете зайти в админку и провести диагностику без потери трафика и репутации.
Кроме того, такой механизм полезен при обновлениях, когда плагин несовместим с новой версией WordPress или PHP.
Как реализовать автоматическое отключение плагинов: обзор подходов
Есть несколько способов организовать автоматическое отключение плагинов при ошибках:
- Использование встроенного механизма
WP_FATAL_ERROR_HANDLER(начиная с WP 5.2) — WordPress при фатальной ошибке предлагает режим восстановления. - Создание собственного обработчика ошибок с хуками
shutdownиerror_get_last(), который будет проверять последние ошибки и отключать проблемный плагин. - Использование сторонних плагинов, например, Clearfy Pro имеет функции для управления проблемными плагинами.
Рассмотрим подробно второй способ с примером собственного решения в виде простого плагина.
Пример плагина для автоматического отключения сломанных плагинов
Создадим плагин с функцией wpstuff_auto_deactivate_plugin_on_error(), которая при обнаружении фатальной ошибки будет искать плагин, вызвавший ошибку, и отключать его.
<?php
/**
* Plugin Name: WPStuff Auto Deactivate Plugins
* Description: Автоматическое отключение плагинов при фатальных ошибках.
* Version: 1.0
* Author: WPStuff
*/
add_action('shutdown', 'wpstuff_auto_deactivate_plugin_on_error');
function wpstuff_auto_deactivate_plugin_on_error() {
$error = error_get_last();
if (!$error) {
return;
}
$fatal_errors = [
E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE
];
if (!in_array($error['type'], $fatal_errors, true)) {
return;
}
// Попытка определить плагин по трассировке ошибки
$trace = isset($error['file']) ? $error['file'] : '';
if (!$trace) {
return;
}
$plugins_dir = WP_PLUGIN_DIR;
if (strpos($trace, $plugins_dir) === false) {
return; // ошибка не из плагинов
}
$plugin_path = str_replace($plugins_dir . '/', '', $trace);
$plugin_parts = explode('/', $plugin_path);
if (count($plugin_parts) < 2) {
return;
}
$plugin_folder = $plugin_parts[0];
// Получаем список всех активных плагинов
$active_plugins = get_option('active_plugins', []);
// Ищем плагин по папке и отключаем
foreach ($active_plugins as $key => $plugin) {
if (strpos($plugin, $plugin_folder . '/') === 0) {
// Деактивируем плагин
deactivate_plugins($plugin);
// Логируем отключение (опционально)
error_log('WPStuff: Автоматически отключен плагин из-за ошибки: ' . $plugin);
break;
}
}
}
Дополнительные рекомендации и безопасность
Несмотря на автоматизацию, важно помнить, что отключение плагина — временное решение. После восстановления доступа в админку необходимо:
- Провести тщательную диагностику плагина, проверить обновления и совместимость.
- Связаться с разработчиком плагина, если ошибка повторяется.
- Использовать плагины для мониторинга ошибок и логирования, например, Query Monitor.
Если боитесь вносить изменения вручную, можно использовать плагин Clearfy Pro, который имеет функции для управления конфликтами и автоматического отключения проблемных расширений.
Как протестировать плагин и отладить
Для теста можно искусственно вызвать ошибку в одном из плагинов, например, добавив в файл плагина строку с ошибкой PHP:
undefined_function();
После этого при загрузке сайта наш плагин автоматически отключит проблемный плагин и выведет в лог соответствующее сообщение.
Логи ошибок можно просмотреть в wp-content/debug.log при включенном режиме WP_DEBUG_LOG или через серверные логи.
Итоги
Автоматическое отключение плагинов при ошибках — важный инструмент для надежности WordPress-сайта. Встроенный механизм восстановления в WP 5.2+ помогает, но собственные решения позволяют точечно управлять проблемами.
Приведенный пример кода — базовый каркас, который можно расширять: добавлять уведомления на email, интеграцию с админкой, сложный парсинг ошибок. Используйте этот подход для повышения отказоустойчивости вашего сайта.