Как автоматически отключить неиспользуемые плагины в WordPress с помощью кода

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

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

Как определить, что плагин не используется

Критерии неиспользуемости могут быть разными, например:

  • Плагин не активировался (не запускался) за последние 30 дней.
  • Плагин не влияет на фронтенд (нет вызовов его функций на страницах).
  • Плагин не обновлялся и не менялся длительное время.

В примере ниже мы сосредоточимся на первом критерии — плагин не был активен (не вызывал свои хуки) в течение 30 дней.

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

Для реализации понадобится отслеживать последнее время активности плагина и периодически проверять эти данные с помощью WP-Cron. Если плагин неактивен более 30 дней, он автоматически отключается.

1. Сохраняем время активности плагина

Добавим код, который на каждом вызове плагина обновляет метку времени в опциях:

function update_plugin_last_active( $plugin_file ) {
    $last_active = get_option( 'plugin_last_active_times', array() );
    $last_active[$plugin_file] = time();
    update_option( 'plugin_last_active_times', $last_active );
}

// Пример для конкретного плагина (замените 'my-plugin/my-plugin.php')
add_action( 'init', function() {
    update_plugin_last_active( 'my-plugin/my-plugin.php' );
} );

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

2. Проверка и отключение неактивных плагинов

Создадим функцию, которая запускается по расписанию и отключает плагины, неактивные более 30 дней:

function auto_deactivate_unused_plugins() {
    $threshold = 30 * DAY_IN_SECONDS;
    $last_active = get_option( 'plugin_last_active_times', array() );
    $active_plugins = get_option( 'active_plugins', array() );
    $now = time();

    foreach ( $active_plugins as $plugin_file ) {
        if ( ! isset( $last_active[ $plugin_file ] ) || ( $now - $last_active[ $plugin_file ] ) > $threshold ) {
            deactivate_plugins( $plugin_file );
            error_log( "Автоматически отключен плагин: $plugin_file из-за неактивности" );
        }
    }
}

// Планируем задачу раз в сутки
if ( ! wp_next_scheduled( 'auto_deactivate_unused_plugins_hook' ) ) {
    wp_schedule_event( time(), 'daily', 'auto_deactivate_unused_plugins_hook' );
}
add_action( 'auto_deactivate_unused_plugins_hook', 'auto_deactivate_unused_plugins' );

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

Чтобы проверить, что решение работает, выполните следующие шаги:

  • Добавьте код отслеживания активности для нескольких плагинов.
  • Искусственно измените время последней активности в опции plugin_last_active_times (через phpMyAdmin или WP CLI), установив дату старше 30 дней.
  • Запустите задачу вручную через WP-CLI: wp cron event run auto_deactivate_unused_plugins_hook.
  • Проверьте, что соответствующие плагины отключены (get_option('active_plugins') не содержит их).
  • Проверьте логи сервера или error_log на наличие сообщений об отключении.

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

  • Плагины не отслеживаются: Не добавлен вызов update_plugin_last_active() для плагина — нужно вставить вызов в хук, который точно срабатывает при его работе.
  • Автоматическое отключение не происходит: WP-Cron может не запускаться из-за отсутствия трафика или неправильных настроек сервера. Запустите крон вручную через WP-CLI или настройте системный cron.
  • Отключение нужных плагинов: Проверьте логи и исключите плагины из автоматического отключения, добавив фильтр или проверку по списку исключений.
  • Проблемы с правами: Функция deactivate_plugins() требует, чтобы код выполнялся с достаточными правами (обычно в админке). Если код запускается в другом контексте, могут быть ошибки.

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

  • Не отключайте критичные для сайта плагины (например, безопасность, кэширование) без проверки.
  • Добавьте в код список исключений, чтобы защитить важные плагины от автоотключения.
  • Для повышения производительности не обновляйте время активности при каждом запросе, а например, не чаще одного раза в час.
  • Используйте WP-CLI для ручного управления и проверки плагинов — это проще и надежнее.
  • Для удобства администрирования можно добавить в админ-панель страницу с отчетом об активности плагинов и истории отключений.

Пример кода с исключениями

function auto_deactivate_unused_plugins() {
    $threshold = 30 * DAY_IN_SECONDS;
    $last_active = get_option( 'plugin_last_active_times', array() );
    $active_plugins = get_option( 'active_plugins', array() );
    $now = time();
    $excluded_plugins = array(
        'akismet/akismet.php',
        'wordpress-seo/wp-seo.php',
    );

    foreach ( $active_plugins as $plugin_file ) {
        if ( in_array( $plugin_file, $excluded_plugins, true ) ) {
            continue; // исключаем важные плагины
        }

        if ( ! isset( $last_active[ $plugin_file ] ) || ( $now - $last_active[ $plugin_file ] ) > $threshold ) {
            deactivate_plugins( $plugin_file );
            error_log( "Автоматически отключен плагин: $plugin_file из-за неактивности" );
        }
    }
}

Сравнение подходов к отключению неиспользуемых плагинов

МетодПлюсыМинусыКогда использовать
Ручное отключениеПолный контроль, простотаДолго при большом количестве плагиновМаленькие сайты, редкие изменения
Автоматизация через WP-Cron и кодЭкономия времени, систематизацияТребует настройки, риски отключения нужных плагиновСредние и крупные проекты с множеством плагинов
Плагины для управления плагинамиУдобный интерфейс, дополнительные функцииДополнительная нагрузка, может конфликтоватьЕсли хочется GUI и расширенный контроль
Как использовать WP Community для автоматизации управления пользователями WordPress
03.04.2026
Как создать собственный шорткод в WordPress: подробное руководство
10.11.2025
Как автоматически оптимизировать базу данных WordPress
06.02.2026
Автоматическое изменение стоимости и наличия товаров WooCommerce через Webhook с примером кода
27.05.2026
Автоматическое создание вариантов товаров WooCommerce по атрибутам через код
02.06.2026