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

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

В WooCommerce частой проблемой являются конфликты между плагинами, которые могут приводить к фатальным ошибкам (fatal errors) и сбоям в работе магазина. Эти ошибки часто возникают после обновления WooCommerce, WordPress или плагинов, и приводят к недоступности сайта или частичной потере функционала.

Чтобы определить проблемный плагин, обычно приходится отключать плагины поочерёдно через админку или FTP, что неудобно и занимает время.

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

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

1. Включение автоматического восстановления

WordPress 5.2+ содержит функцию автоматического восстановления при фатальных ошибках. Она отключает проблемный плагин и отправляет уведомление на email администратора. Но в WooCommerce бывают ситуации, когда этого недостаточно, особенно если ошибка возникает в нескольких плагинах или при специфических условиях.

2. Создание кастомного обработчика фатальных ошибок

Можно добавить в файл wp-config.php код для перехвата фатальных ошибок и отключения плагинов, вызывающих сбой.

register_shutdown_function(function() {
    $error = error_get_last();
    if ($error && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
        $message = $error['message'];
        $plugin_dir = null;

        // Пример поиска плагина по пути в сообщении об ошибке
        if (preg_match('/\/wp-content\/plugins\/([^\/]+)/', $message, $matches)) {
            $plugin_dir = $matches[1];
        }

        if ($plugin_dir) {
            $active_plugins = get_option('active_plugins');
            $plugin_file = null;
            foreach ($active_plugins as $plugin) {
                if (strpos($plugin, $plugin_dir . '/') === 0) {
                    $plugin_file = $plugin;
                    break;
                }
            }

            if ($plugin_file) {
                // Отключаем плагин
                deactivate_plugins($plugin_file);

                // Логируем отключение
                error_log('Plugin disabled automatically due to fatal error: ' . $plugin_file);

                // Отправляем уведомление админу
                wp_mail(get_option('admin_email'), 'Plugin disabled automatically', 'Плагин ' . $plugin_file . ' был отключён из-за фатальной ошибки: ' . $message);
            }
        }
    }
});

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

3. Использование плагинов для управления ошибками

Можно дополнительно использовать плагины типа Health Check & Troubleshooting, которые помогают выявлять проблемные плагины и режимы устранения конфликтов, но они не автоматизируют отключение.

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

  • Имитируйте ошибку в одном из плагинов WooCommerce (например, добавьте в файл плагина вызов trigger_error('Test error', E_USER_ERROR);).
  • Обновите страницу сайта — должна произойти автоматическая деактивация плагина.
  • Проверьте логи сервера и почту администратора — должен быть записан лог и отправлено уведомление.
  • Убедитесь, что сайт работает без фатальной ошибки.

Частые ошибки и как их исправить

  • Код в wp-config.php не выполняется: Проверьте правильность расположения кода — он должен быть в верхней части файла, до инициализации WordPress.
  • Не отключаются плагины: Функция deactivate_plugins() может быть недоступна на этапе shutdown. Решение — использовать прямое изменение опции active_plugins через update_option().
  • Письма не отправляются: Проверьте настройки почты на хостинге, используйте SMTP-плагины для корректной отправки.
  • Ошибка в определении плагина по сообщению об ошибке: Регулярное выражение можно адаптировать под структуру путей плагинов в вашем окружении.

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

  • Не оставляйте в продакшене тестовые вызовы ошибок.
  • Регулярно обновляйте WordPress, WooCommerce и плагины для минимизации ошибок.
  • Используйте систему логирования для отслеживания отключений плагинов и последующего анализа.
  • Резервное копирование перед внесением изменений в код.
  • Для крупных магазинов рассмотрите настройку staging-среды для тестирования обновлений.

Чек-лист для автоматического отключения плагинов при ошибках

  1. Включена функция автоматического восстановления WordPress (версия 5.2+).
  2. Добавлен кастомный обработчик ошибок в wp-config.php или плагин.
  3. Проверена корректность регулярного выражения для поиска плагина в сообщении об ошибке.
  4. Настроена отправка уведомлений на email администратора.
  5. Тестируется функциональность на тестовом сайте.
  6. Ведется журнал отключений плагинов.

Сравнение подходов: плагин vs код

МетодПреимуществаНедостатки
Встроенное автоматическое восстановление WPРаботает из коробки, простое решение, уведомления на почтуНе всегда корректно определяет проблемный плагин, ограничено настройками
Кастомный обработчик в wp-config.phpГибкость, можно адаптировать под конкретные ошибки, отправляет свои уведомленияТребует знания PHP, риски при неправильном коде, возможны проблемы с доступностью функций
Плагины диагностики (Health Check)Удобный интерфейс, режим устранения неполадокНе отключают плагины автоматически, требуют ручного вмешательства
Как закрыть дубли страниц от индексации в WordPress без поломки SEO
22.08.2026