Плагины — основа расширения функционала WordPress, но иногда они могут вызывать ошибки, которые приводят к недоступности сайта или сбоям в работе. Ручное отключение плагинов через админку не всегда возможно, особенно если сайт не загружается. В этой статье рассмотрим, как автоматизировать процесс отключения проблемных плагинов при возникновении ошибок PHP, чтобы минимизировать простой сайта и быстро восстановить работоспособность.
Почему важно автоматически отключать плагины при ошибках
Большинство ошибок, связанных с плагинами, проявляются после обновлений или установки новых расширений. Если ошибка приводит к белому экрану или фатальному сбою, админ-панель становится недоступна, и для восстановления нужно вручную отключать плагины через FTP или базу данных.
Автоматический механизм отключения позволит сразу выявить проблемный плагин и деактивировать его, сохранив доступ к сайту и снизив время простоя. Это особенно актуально для магазинов и сервисов с высокой посещаемостью.
Как работает автоматическое отключение плагинов
Суть решения — перехватывать фатальные ошибки через обработчик ошибок PHP и в случае обнаружения ошибки, связанной с плагином, автоматически деактивировать его, записав информацию для администратора.
Реализация обычно базируется на хуках WordPress и функции register_shutdown_function, которая вызывается при завершении скрипта, в том числе при фатальных ошибках.
Пример базового обработчика ошибок для отключения плагинов
function wpkit_shutdown_handler() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE])) {
// Получаем активные плагины
$active_plugins = get_option('active_plugins', []);
foreach ($active_plugins as $plugin) {
// Путь к основному файлу плагина
$plugin_path = WP_PLUGIN_DIR . '/' . $plugin;
// Проверяем, есть ли ошибка в файлах этого плагина
if (strpos($error['file'], $plugin_path) === 0) {
// Деактивируем плагин
$new_plugins = array_diff($active_plugins, [$plugin]);
update_option('active_plugins', $new_plugins);
// Логируем деактивацию
error_log("[wpkit] Отключен плагин $plugin из-за ошибки: {$error['message']}");
break;
}
}
}
}
register_shutdown_function('wpkit_shutdown_handler');
Этот код нужно добавить в файл wp-config.php или в отдельный must-use плагин. Он проверяет последнюю ошибку, и если она связана с файлом плагина, отключает этот плагин автоматически.
Улучшение безопасности и информирование администратора
Важно не просто отключить плагин, а уведомить администратора сайта, чтобы он смог оперативно принять меры. Для этого можно отправлять email с деталями ошибки.
Добавление уведомления по email
function wpkit_shutdown_handler() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE])) {
$active_plugins = get_option('active_plugins', []);
foreach ($active_plugins as $plugin) {
$plugin_path = WP_PLUGIN_DIR . '/' . $plugin;
if (strpos($error['file'], $plugin_path) === 0) {
$new_plugins = array_diff($active_plugins, [$plugin]);
update_option('active_plugins', $new_plugins);
$admin_email = get_option('admin_email');
$subject = "[wpkit] Плагин $plugin автоматически отключён из-за ошибки";
$message = "Ошибка: {$error['message']}\nФайл: {$error['file']}\nСтрока: {$error['line']}\nПлагин был деактивирован для восстановления работы сайта.";
wp_mail($admin_email, $subject, $message);
error_log("[wpkit] Отключен плагин $plugin из-за ошибки: {$error['message']}");
break;
}
}
}
}
register_shutdown_function('wpkit_shutdown_handler');
Такой подход повысит информированность и позволит быстро реагировать на неполадки.
Советы по использованию и доработке
- Тестируйте на тестовом сервере. Автоматическое отключение плагинов может привести к неожиданным последствиям, если ошибка вызвана внешними факторами.
- Записывайте логи. Ведение журнала ошибок упростит отладку и выявление проблемных расширений.
- Ограничьте обработку. Чтобы избежать отключения большого количества плагинов, можно добавить проверку только для критичных плагинов или по определённому условию.
- Используйте готовые решения. Если не хотите писать код самостоятельно, рассмотрите плагины для мониторинга и автоматизации восстановления, например, Clearfy Pro, который помогает управлять безопасностью и оптимизацией сайта.
Пример реализации в виде MU-плагина
Для надежности и удобства можно создать must-use (MU) плагин, который всегда загружается WordPress и не может быть отключен через админку. Создайте файл wp-content/mu-plugins/wpkit-auto-disable.php со следующим содержимым:
<?php
/**
* Plugin Name: WP-Kit Auto Disable Plugins on Fatal Errors
* Description: Автоматически отключает плагины при возникновении фатальных ошибок.
* Version: 1.0
* Author: WP-Kit
*/
function wpkit_shutdown_handler() {
$error = error_get_last();
if ($error && in_array($error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE])) {
$active_plugins = get_option('active_plugins', []);
foreach ($active_plugins as $plugin) {
$plugin_path = WP_PLUGIN_DIR . '/' . $plugin;
if (strpos($error['file'], $plugin_path) === 0) {
$new_plugins = array_diff($active_plugins, [$plugin]);
update_option('active_plugins', $new_plugins);
$admin_email = get_option('admin_email');
$subject = "[wpkit] Плагин $plugin автоматически отключён из-за ошибки";
$message = "Ошибка: {$error['message']}\nФайл: {$error['file']}\nСтрока: {$error['line']}\nПлагин деактивирован для восстановления работы сайта.";
wp_mail($admin_email, $subject, $message);
error_log("[wpkit] Отключен плагин $plugin из-за ошибки: {$error['message']}");
break;
}
}
}
}
register_shutdown_function('wpkit_shutdown_handler');
?>
Этот плагин будет автоматически контролировать ошибки и отключать проблемные плагины, сохраняя стабильность сайта.
Заключение
Автоматическое отключение плагинов при ошибках — очень полезная техника, которая поможет избежать длительных простоев и упростит администрирование WordPress-сайтов. Рекомендую внедрять такие решения на всех важных проектах, особенно если вы управляете большим количеством плагинов или сторонними расширениями.
Если хотите расширить возможности и получить более гибкое управление безопасностью и оптимизацией, обратите внимание на Clearfy Pro — мощный инструмент от WPShop.