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

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

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

В типичном случае администратор забывает отключить или удалить плагины, которые не используются. Быстрая диагностика: зайдите в раздел «Плагины» в админке и отметьте плагины, которые не используются более 30 дней.

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

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

function get_plugin_last_modified($plugin_slug) {
    $plugin_dir = WP_PLUGIN_DIR . '/' . $plugin_slug;
    $last_modified = 0;
    if (is_dir($plugin_dir)) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugin_dir));
        foreach ($files as $file) {
            if ($file->isFile()) {
                $time = $file->getMTime();
                if ($time > $last_modified) {
                    $last_modified = $time;
                }
            }
        }
    }
    return $last_modified;
}

Этот код возвращает timestamp последней модификации файлов плагина, что можно использовать для оценки его активности.

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

1. Установка порога неактивности

Выберите период, после которого плагин считается неиспользуемым, например 30 или 60 дней.

2. Определение неиспользуемых плагинов

Можно проверять дату последней модификации файлов плагина, например так:

function get_inactive_plugins_by_modification($days = 30) {
    $inactive_plugins = [];
    $all_plugins = get_plugins();
    $threshold = time() - ($days * DAY_IN_SECONDS);
    foreach ($all_plugins as $plugin_file => $plugin_data) {
        $plugin_slug = dirname($plugin_file);
        $last_modified = get_plugin_last_modified($plugin_slug);
        if ($last_modified < $threshold && is_plugin_active($plugin_file)) {
            $inactive_plugins[] = $plugin_file;
        }
    }
    return $inactive_plugins;
}

3. Автоматическое отключение через wp-cli или хук

Для автоматизации можно добавить cron-задачу (WP-Cron), которая будет отключать неиспользуемые плагины:

function auto_deactivate_unused_plugins() {
    $plugins_to_deactivate = get_inactive_plugins_by_modification(30);
    if (!empty($plugins_to_deactivate)) {
        deactivate_plugins($plugins_to_deactivate);
    }
}
add_action('wp_scheduled_auto_deactivate', 'auto_deactivate_unused_plugins');

// Создаём событие при активации темы или плагина
if (!wp_next_scheduled('wp_scheduled_auto_deactivate')) {
    wp_schedule_event(time(), 'daily', 'wp_scheduled_auto_deactivate');
}

Этот код ежедневно проверяет и отключает плагины, не обновлявшиеся 30 дней и более.

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

  • Зайдите в админку WordPress > Плагины и убедитесь, что неиспользуемые плагины отключены.
  • Запустите вручную функцию из консоли wp-cli: wp eval 'auto_deactivate_unused_plugins();' и проверьте изменение статуса плагинов.
  • Проверьте логи WP-Cron (например, через плагин WP Crontrol), чтобы убедиться, что задача срабатывает ежедневно.

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

  • Неверно определён порог неактивности. Если период слишком короткий, можно случайно отключить нужные плагины. Рекомендуется минимум 30 дней.
  • Отсутствие проверки активного статуса. Отключение только по дате модификации не учитывает плагины, которые реально используются, но не обновлялись. Добавьте дополнительную логику при необходимости.
  • Ошибка доступа к файловой системе. Убедитесь, что PHP имеет права на чтение директорий плагинов.
  • Конфликты с другими плагинами. При массовом отключении плагинов может нарушиться работа сайта. Рекомендуется сначала создать резервную копию.

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

  • Перед внедрением автоматического отключения плагинов сделайте полное резервное копирование сайта и базы данных.
  • Добавьте логирование отключений для последующего аудита, например, записывайте в отдельный файл или в системный лог.
  • Используйте WP-Cron с осторожностью — если хостинг не поддерживает системный cron, задачи могут не выполняться вовремя.
  • Периодически вручную проверяйте отключённые плагины, чтобы либо удалить их, либо обновить и активировать заново при необходимости.
  • Для сайтов с высоким трафиком лучше использовать системный cron вместо WP-Cron для надёжности.

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

МетодПлюсыМинусыРекомендуемый сценарий
Ручное отключениеПолный контроль, без ошибокТрудозатратно, забываетсяМалые сайты
Автоматизация по дате модификации файловПросто реализовать, не требует плагиновНе учитывает реальное использованиеСредние сайты с небольшой командой поддержки
Автоматизация по активности (логирование)Точный учёт использованияСложнее в реализации, требует дополнительного кодаКрупные проекты с большим количеством плагинов
Использование специализированных плагиновУдобство, готовый функционалДополнительная нагрузка, может конфликтоватьБыстрое внедрение без разработки
Как добавить поддержку нескольких языков в WordPress своими силами
09.03.2026
Как установить ограничение на размер файлов при загрузке в WordPress
13.04.2026
WooCommerce: автоматический возврат денег при отклонённом платеже
17.06.2026
Как установить ограничение на загрузку файлов в WordPress
02.01.2026
WP-Cron не работает: как исправить проблему в WordPress
15.11.2025