WooCommerce: как создать систему автоматического отключения плагинов при ошибках

Диагностика проблемы с конфликтующими плагинами в WooCommerce

В крупных интернет-магазинах на WooCommerce часто возникают ситуации, когда из-за конфликтов плагинов или ошибок PHP сайт начинает работать нестабильно или вовсе падает. В таких случаях ручное отключение плагинов через админку или FTP — громоздкое и не всегда оперативное решение.

Задача — создать автоматическую систему, которая будет отключать проблемный плагин при возникновении фатальной ошибки или конфликта, сохраняя работоспособность WooCommerce.

Как определить проблемный плагин?

  • Анализ логов ошибок PHP (wp-content/debug.log при включённом WP_DEBUG_LOG)
  • Использование плагинов для отладки, например, Query Monitor
  • Пошагенное включение/отключение плагинов

Пошаговое решение: автоматический откат плагинов при ошибках

1. Включаем отладку и логирование ошибок

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

Это позволит записывать ошибки в wp-content/debug.log без вывода на экран.

2. Создаём функцию для автоматического отключения плагина

Добавим в functions.php дочерней темы или в отдельный плагин код, который будет отслеживать фатальные ошибки и отключать проблемный плагин.

register_shutdown_function('wc_auto_disable_plugin_on_fatal_error');

function wc_auto_disable_plugin_on_fatal_error() {
    $error = error_get_last();
    if (!$error) {
        return;
    }

    $fatal_errors = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR];
    if (in_array($error['type'], $fatal_errors)) {
        $plugin_to_disable = identify_faulty_plugin($error['message']);
        if ($plugin_to_disable) {
            deactivate_plugins($plugin_to_disable);
            error_log("Automatic deactivation of plugin: " . $plugin_to_disable);
        }
    }
}

function identify_faulty_plugin($error_message) {
    $plugins = get_option('active_plugins');
    foreach ($plugins as $plugin) {
        if (strpos($error_message, plugin_basename(WP_PLUGIN_DIR . '/' . $plugin)) !== false) {
            return $plugin;
        }
    }
    return false;
}

Функция register_shutdown_function вызывается на завершении работы PHP, проверяет последний произошедший фатальный тип ошибки и пытается определить плагин по сообщению ошибки.

3. Ограничения и дополнительные меры

  • Функция deactivate_plugins() требует подключения файла plugin.php из ядра WordPress — убедитесь, что этот код выполняется в контексте WordPress.
  • Идентификация плагина по тексту ошибки не всегда точна, может потребоваться доработка под конкретные ошибки.
  • Для корпоративных сайтов рекомендуется настраивать мониторинг ошибок через сторонние системы (NewRelic, Sentry) и оповещения по email.

Проверка результата после внедрения

  • Имитируйте ошибку в одном из плагинов, например, вызовом несуществующей функции.
  • Проверьте файл wp-content/debug.log, увидите сообщение о деактивации.
  • Зайдите в админку WordPress в раздел "Плагины" — проблемный плагин должен быть деактивирован.
  • Если сайт не падает, значит, система сработала корректно.

Частые ошибки и способы их исправления

  • Плагин не отключается: Проверьте, что функция deactivate_plugins() вызывается в правильном контексте и подключён файл wp-admin/includes/plugin.php (можно добавить require_once ABSPATH . 'wp-admin/includes/plugin.php';).
  • Ошибка не распознаётся: Сообщение об ошибке не содержит путей к плагинам. Для улучшения идентификации расширьте функцию identify_faulty_plugin с использованием регулярных выражений или добавьте дополнительные проверки.
  • Автоматическое отключение вызывает новые ошибки: Отключайте плагины последовательно и тестируйте на тестовом стенде перед применением на рабочем сайте.

Практические советы по безопасности и производительности

  • Не используйте данную систему как основной метод отладки — она предназначена для экстренного восстановления работы.
  • Настройте регулярное резервное копирование сайта перед применением изменений.
  • Для снижения нагрузки логируйте только критические ошибки, избегайте избыточного логирования.
  • Рассмотрите использование плагинов типа WP Activity Log для отслеживания активности плагинов и пользователей.

Сравнение способов автоматического отключения плагинов

МетодПлюсыМинусы
Код на PHP с register_shutdown_functionАвтоматично отключает проблемные плагины без вмешательстваСложна точная идентификация, возможны ложные срабатывания
Внешние сервисы мониторинга (Sentry, NewRelic)Подробный анализ ошибок, оповещенияТребуют настройки и оплаты
Ручное отключение через админкуПолный контроль, простотаТребует времени и доступа
Как автоматически удалять неактивных пользователей WordPress с помощью кода
27.03.2026
Добавление поддержки WebP в WordPress без плагинов: практическое руководство
07.04.2026
Как установить лимит на количество сообщений в формах WordPress
31.03.2026
Как создать автоматический отчет по Google Analytics в WordPress
17.03.2026
Как создать функцию автоматического расширения категорий в WordPress
25.12.2025