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

В процессе работы WordPress-сайта иногда возникают ситуации, когда один из плагинов начинает вызывать критические ошибки — это может привести к белому экрану смерти (WSOD), сбоям в работе сайта и потере посетителей. В таких случаях полезно иметь механизм, который автоматически отключит проблемный плагин, чтобы сайт остался доступен, а администратор получил уведомление для дальнейшего анализа.

Почему автоматическое отключение плагинов полезно

Часто ошибки от плагинов возникают после обновления или конфликта с другими компонентами сайта. Если вовремя не отключить плагин, сайт может перестать работать, а для многих владельцев и разработчиков это становится настоящей проблемой, особенно если нет доступа к админке через браузер.

Автоматическая система отключения позволяет:

  • Быстро восстановить работоспособность сайта без ручного вмешательства;
  • Получить информацию о проблемном плагине для последующего устранения;
  • Избежать потери посетителей и ухудшения SEO;
  • Облегчить поддержку и сопровождение WordPress-сайтов.

Основные принципы реализации автоматического отключения плагинов

Для реализации такой системы нужно уметь:

  • Отловить критические ошибки PHP, вызванные плагинами;
  • Определить, какой именно плагин вызвал ошибку;
  • Отключить проблемный плагин программно;
  • Отправить уведомление администратору (например, на email) с деталями ошибки;
  • Обеспечить безопасность и минимизировать ложные срабатывания.

В WordPress есть несколько способов обрабатывать ошибки и отключать плагины. Рассмотрим наиболее эффективный.

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

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

function wpmy_handle_fatal_error() {
    $error = error_get_last();
    if ($error && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
        // Получаем стек вызовов с помощью debug_backtrace невозможно, но можно проанализировать $error['message']
        $message = $error['message'];
        $plugin_dir = wpmy_detect_plugin_from_error($message);
        if ($plugin_dir) {
            // Отключаем плагин
            wpmy_deactivate_plugin_by_dir($plugin_dir);
            // Отправляем уведомление администратору
            wpmy_send_error_notification($plugin_dir, $message);
        }
    }
}
register_shutdown_function('wpmy_handle_fatal_error');

function wpmy_detect_plugin_from_error($message) {
    // Получаем список активных плагинов
    $active_plugins = get_option('active_plugins');
    foreach ($active_plugins as $plugin) {
        // Плагин обычно хранится в папке вида plugin-folder/plugin-file.php
        $plugin_folder = dirname($plugin);
        // Проверяем, есть ли упоминание папки плагина в сообщении ошибки
        if (strpos($message, $plugin_folder) !== false) {
            return $plugin_folder;
        }
    }
    return false;
}

function wpmy_deactivate_plugin_by_dir($plugin_folder) {
    $active_plugins = get_option('active_plugins');
    foreach ($active_plugins as $key => $plugin) {
        if (strpos($plugin, $plugin_folder . '/') === 0) {
            unset($active_plugins[$key]);
            update_option('active_plugins', $active_plugins);
            break;
        }
    }
}

function wpmy_send_error_notification($plugin_folder, $message) {
    $admin_email = get_option('admin_email');
    $subject = 'Автоматическое отключение плагина из-за ошибки';
    $body = "Плагин '{$plugin_folder}' был автоматически отключен из-за критической ошибки:\n\n{$message}";
    wp_mail($admin_email, $subject, $body);
}

Как работает код

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

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

Дополнительные рекомендации и улучшения

Использование плагинов для мониторинга и отключения

Существуют плагины, которые помогают отслеживать ошибки и отключать проблемные плагины, например, Clearfy Pro. Он включает функции безопасности и оптимизации, среди которых есть защита от конфликтов.

Логирование ошибок в отдельный файл

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

Ограничение срабатываний

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

Пример расширения: создание шорткода для отображения статуса плагинов

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

function wpmy_plugin_status_shortcode() {
    $active_plugins = get_option('active_plugins');
    $all_plugins = get_plugins();
    $output = '<ul>';
    foreach ($all_plugins as $plugin_file => $plugin_data) {
        $status = in_array($plugin_file, $active_plugins) ? 'Активен' : 'Отключен';
        $output .= '<li>' . esc_html($plugin_data['Name']) . ' — ' . $status . '</li>';
    }
    $output .= '</ul>';
    return $output;
}
add_shortcode('wpmy_plugins_status', 'wpmy_plugin_status_shortcode');

В админке или на странице сайта можно вставить шорткод [wpmy_plugins_status], чтобы получить список с состоянием плагинов.

Заключение

Автоматическая система отключения плагинов при ошибках — мощный инструмент для повышения стабильности WordPress-сайта. Она позволяет своевременно реагировать на проблемы, минимизируя время простоя и улучшая опыт пользователей. Несмотря на то, что полностью избежать ошибок невозможно, грамотное автоматическое управление активными плагинами значительно упрощает поддержку проекта.

Реализация, приведённая в статье, является базовой и может быть расширена с учётом специфики вашего сайта. Обязательно тестируйте код на тестовом сервере, прежде чем использовать на продакшене.

Как настроить автоматическое сохранение changelog плагина или темы в WordPress
18.12.2025
Как автоматически удалять неактивных пользователей WordPress с помощью кода
27.03.2026
Как создать свой плагин WordPress с нуля: пошаговое руководство
08.11.2025
Как использовать WPGraphQL для автоматизации задач WordPress
03.02.2026
WooCommerce: как решить проблему с неотображением вариаций товаров
25.05.2026