Как автоматически отключать плагины в WordPress при ошибках

Плагины — основа расширения функционала 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.

Как проверить и исправить проблемы с переадресацией в WordPress без плагинов
09.06.2026
Как отладить проблемы с PHP Fatal Error в WordPress после обновления
28.04.2026
Как отправлять Telegram уведомления из WordPress без плагинов
17.04.2026
Как сделать автоматический редирект после регистрации в WordPress
21.02.2026
Как использовать WPCommunity для автоматической регистрации пользователей в WordPress
26.03.2026