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

WordPress — мощная CMS, но иногда плагины могут вызывать критические ошибки, которые приводят к недоступности сайта. Особенно это актуально, если у вас много плагинов и нет времени быстро разбираться, какой из них сломался. В этой статье мы разберем, как можно автоматизировать процесс отключения проблемных плагинов при возникновении фатальных ошибок. Это поможет минимизировать время простоя сайта и быстро вернуть его работу.

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

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

Автоматизация отключения позволяет WordPress самому выявить и отключить проблемный плагин, обеспечив возвращение сайта в рабочее состояние. Так вы сможете зайти в админку и провести диагностику без потери трафика и репутации.

Кроме того, такой механизм полезен при обновлениях, когда плагин несовместим с новой версией WordPress или PHP.

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

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

  • Использование встроенного механизма WP_FATAL_ERROR_HANDLER (начиная с WP 5.2) — WordPress при фатальной ошибке предлагает режим восстановления.
  • Создание собственного обработчика ошибок с хуками shutdown и error_get_last(), который будет проверять последние ошибки и отключать проблемный плагин.
  • Использование сторонних плагинов, например, Clearfy Pro имеет функции для управления проблемными плагинами.

Рассмотрим подробно второй способ с примером собственного решения в виде простого плагина.

Пример плагина для автоматического отключения сломанных плагинов

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

<?php
/**
 * Plugin Name: WPStuff Auto Deactivate Plugins
 * Description: Автоматическое отключение плагинов при фатальных ошибках.
 * Version: 1.0
 * Author: WPStuff
 */

add_action('shutdown', 'wpstuff_auto_deactivate_plugin_on_error');

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

    $fatal_errors = [
        E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE
    ];

    if (!in_array($error['type'], $fatal_errors, true)) {
        return;
    }

    // Попытка определить плагин по трассировке ошибки
    $trace = isset($error['file']) ? $error['file'] : '';
    if (!$trace) {
        return;
    }

    $plugins_dir = WP_PLUGIN_DIR;

    if (strpos($trace, $plugins_dir) === false) {
        return; // ошибка не из плагинов
    }

    $plugin_path = str_replace($plugins_dir . '/', '', $trace);
    $plugin_parts = explode('/', $plugin_path);
    if (count($plugin_parts) < 2) {
        return;
    }

    $plugin_folder = $plugin_parts[0];

    // Получаем список всех активных плагинов
    $active_plugins = get_option('active_plugins', []);

    // Ищем плагин по папке и отключаем
    foreach ($active_plugins as $key => $plugin) {
        if (strpos($plugin, $plugin_folder . '/') === 0) {
            // Деактивируем плагин
            deactivate_plugins($plugin);

            // Логируем отключение (опционально)
            error_log('WPStuff: Автоматически отключен плагин из-за ошибки: ' . $plugin);

            break;
        }
    }
}

Дополнительные рекомендации и безопасность

Несмотря на автоматизацию, важно помнить, что отключение плагина — временное решение. После восстановления доступа в админку необходимо:

  • Провести тщательную диагностику плагина, проверить обновления и совместимость.
  • Связаться с разработчиком плагина, если ошибка повторяется.
  • Использовать плагины для мониторинга ошибок и логирования, например, Query Monitor.

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

Как протестировать плагин и отладить

Для теста можно искусственно вызвать ошибку в одном из плагинов, например, добавив в файл плагина строку с ошибкой PHP:

undefined_function();

После этого при загрузке сайта наш плагин автоматически отключит проблемный плагин и выведет в лог соответствующее сообщение.

Логи ошибок можно просмотреть в wp-content/debug.log при включенном режиме WP_DEBUG_LOG или через серверные логи.

Итоги

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

Приведенный пример кода — базовый каркас, который можно расширять: добавлять уведомления на email, интеграцию с админкой, сложный парсинг ошибок. Используйте этот подход для повышения отказоустойчивости вашего сайта.

Автоматическое удаление неактивных пользователей WordPress
27.03.2026
Как создать адаптивный шаблон WordPress с нуля
31.10.2025
Как автоматически менять статус заказов WooCommerce по условиям
16.05.2026
Как автоматически удалять старые черновики в WordPress
30.03.2026
Как экспортировать и импортировать настройки WooCommerce с помощью кода
03.05.2026