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

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

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

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

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

Критерии определения неиспользуемых плагинов

Прежде чем реализовать автоматическое отключение, нужно определить, какие плагины считать неиспользуемыми. Самые распространённые критерии:

  • Отсутствие активности за определённый период. Например, плагин не был активирован или не вызывался в течение 30 дней.
  • Отсутствие пользовательских действий. Если плагин предоставляет интерфейс, но к нему не обращались, можно посчитать его неактивным.
  • Отсутствие изменений в базе данных или файлах. Если плагин не производит изменений, значит он не работает.

Для реализации автоматического отключения чаще всего используют первый критерий — период неактивности.

Использование WP-Cron для проверки активности плагинов

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

Ниже пример функции для wp-market.ru, которая проверяет дату последней активности плагина и отключает его, если прошло более 30 дней.

function wpmarket_auto_deactivate_unused_plugins() {
    $inactive_period = 30 * DAY_IN_SECONDS; // 30 дней
    $plugins = get_plugins();
    $active_plugins = get_option('active_plugins', []);

    foreach ($active_plugins as $plugin_file) {
        $plugin_data = isset($plugins[$plugin_file]) ? $plugins[$plugin_file] : null;
        if (!$plugin_data) continue;

        // Проверим дату последней модификации файлов плагина
        $plugin_dir = WP_PLUGIN_DIR . '/' . dirname($plugin_file);
        $last_modified = wpmarket_get_last_modified_plugin_file($plugin_dir);

        if (!$last_modified) continue;

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

            // Логируем отключение (по желанию)
            error_log("[WP-MARKET] Плагин {$plugin_file} автоматически отключён из-за неактивности.");
        }
    }
}

function wpmarket_get_last_modified_plugin_file($plugin_dir) {
    $last_modified = 0;
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugin_dir));
    foreach ($files as $file) {
        if ($file->isFile()) {
            $file_mtime = $file->getMTime();
            if ($file_mtime > $last_modified) {
                $last_modified = $file_mtime;
            }
        }
    }
    return $last_modified;
}

// Запускаем проверку раз в сутки
if (!wp_next_scheduled('wpmarket_daily_plugin_check')) {
    wp_schedule_event(time(), 'daily', 'wpmarket_daily_plugin_check');
}
add_action('wpmarket_daily_plugin_check', 'wpmarket_auto_deactivate_unused_plugins');

В данном примере мы считаем, что если файлы плагина не менялись последние 30 дней, значит он не используется. Это упрощённый подход, но в большинстве случаев работает.

Оптимизация и улучшение логики определения неиспользуемых плагинов

Проверка по времени изменения файлов — не всегда точный индикатор использования. Для более точного определения можно использовать:

  • Отслеживание вызовов функций плагинов через хуки и фильтры, записывая время последнего обращения.
  • Анализ активности базы данных — если плагин не записывает и не читает данные, он, вероятно, не используется.
  • Логирование пользовательских действий в админке, связанных с плагином.

Например, можно добавить в плагин простой механизм фиксации активности:

function wpmarket_update_plugin_activity() {
    $plugin_key = 'example-plugin'; // Уникальный ключ плагина
    update_option('wpmarket_plugin_last_active_' . $plugin_key, time());
}

// Вызвать эту функцию в ключевых местах плагина
// Например, при загрузке страницы настроек или выполнении основной функции

Затем в функции автоматического отключения сравнивать текущую дату с датой последней активности из опции.

Рекомендуемые плагины для управления неиспользуемыми плагинами

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

  • Clearfy Pro — плагин для оптимизации WordPress, который позволяет отключать лишние функции и плагины по расписанию.
  • WPRemark — автоматизация управления заказами и уведомлениями, можно адаптировать под задачи активации/деактивации.

Выбор зависит от ваших задач и уровня технической подготовки.

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

Перед внедрением автоматического отключения важно предусмотреть меры безопасности. В частности:

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

Минимальный пример уведомления в коде:

function wpmarket_notify_admin_plugin_deactivation($plugin_file) {
    $admin_email = get_option('admin_email');
    $subject = 'WP-MARKET: плагин отключён автоматически';
    $message = "Плагин {$plugin_file} был отключён из-за неактивности.";
    wp_mail($admin_email, $subject, $message);
}

// Вызов внутри цикла отключения
wpmarket_notify_admin_plugin_deactivation($plugin_file);
Как автоматически отключать неиспользуемые вариации товаров в WooCommerce
03.06.2026
Как создать автоматический импорт последних новостей в WordPress с помощью WPMarket
08.02.2026
Как автоматически удалять записи по статусу в WordPress
12.04.2026
Как создать автоматический импорт атрибутов в WooCommerce с помощью кода
04.04.2026
Как автоматически удалить вариации товаров WooCommerce по заданным условиям
26.05.2026