Как автоматизировать удаление обновлений и загрузочных файлов WooCommerce

Проблема: накопление устаревших файлов обновлений и загрузок в WooCommerce

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

Типичные проявления проблемы:

  • Папка wp-content/uploads/wc-logs растёт до гигабайт
  • Временные файлы обновлений WooCommerce в wp-content/upgrade не удаляются
  • Загружаемые для обновлений архивы остаются и занимают место
  • Медленная работа сайта из-за большого количества временных файлов

Диагностика: как проверить наличие и объём мусорных файлов WooCommerce

Подключитесь к серверу через SSH или используйте файловый менеджер хостинга. Просмотрите следующие директории:

  • wp-content/uploads/wc-logs – логи WooCommerce
  • wp-content/upgrade – временные файлы обновлений
  • wp-content/uploads/wc-uploads – пользовательские загрузки WooCommerce (например, файлы товаров)

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

du -sh wp-content/uploads/wc-logs wp-content/upgrade wp-content/uploads/wc-uploads

Также проверьте записи в базе данных для оставшихся ссылок на удалённые файлы, чтобы избежать ошибки 404.

Пошаговое решение: автоматизация удаления устаревших файлов WooCommerce

1. Создаём регулярный WP-Cron для очистки папок

Добавьте в functions.php темы или создайте небольшой плагин с кодом, который будет удалять файлы старше 7 дней из указанных директорий:

function wc_cleanup_old_files() {
    $dirs = [
        wp_upload_dir()['basedir'] . '/wc-logs',
        ABSPATH . 'wp-content/upgrade',
        wp_upload_dir()['basedir'] . '/wc-uploads'
    ];

    foreach ($dirs as $dir) {
        if (!is_dir($dir)) continue;
        $files = glob($dir . '/*');
        $now = time();

        foreach ($files as $file) {
            if (is_file($file) && ($now - filemtime($file)) > 7 * 24 * 60 * 60) {
                @unlink($file);
            }
        }
    }
}

add_action('wc_daily_cleanup', 'wc_cleanup_old_files');

if (!wp_next_scheduled('wc_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wc_daily_cleanup');
}

2. Используем WP-CLI для дополнительной чистки (если есть доступ)

WP-CLI позволяет скриптовать очистку через команду, которую можно запускать по cron на сервере:

wp eval '
function wc_cleanup_old_files_cli() {
    $dirs = [
        WP_CONTENT_DIR . "/uploads/wc-logs",
        ABSPATH . "wp-content/upgrade",
        WP_CONTENT_DIR . "/uploads/wc-uploads"
    ];
    foreach ($dirs as $dir) {
        if (!is_dir($dir)) continue;
        $files = glob($dir . "/*");
        $now = time();
        foreach ($files as $file) {
            if (is_file($file) && ($now - filemtime($file)) > 7 * 24 * 60 * 60) {
                @unlink($file);
            }
        }
    }
}
wc_cleanup_old_files_cli();
'

3. Удаление старых записей логов из базы WooCommerce

Логи WooCommerce хранятся в таблице wp_woocommerce_log (если включены). Для удаления записей старше 30 дней выполните SQL-запрос:

DELETE FROM wp_woocommerce_log WHERE date_created < NOW() - INTERVAL 30 DAY;

Или реализуйте автоматизацию через WP-Cron:

function wc_cleanup_old_logs_db() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_log';
    $wpdb->query("DELETE FROM {$table} WHERE date_created < DATE_SUB(NOW(), INTERVAL 30 DAY)");
}
add_action('wc_daily_cleanup', 'wc_cleanup_old_logs_db');

Проверка результата

После внедрения кода:

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

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

  • Недостаточно прав на удаление файлов. Убедитесь, что PHP-процесс имеет права на запись и удаление в целевых папках.
  • Путь к папкам указан неверно. Используйте функции wp_upload_dir() и константу ABSPATH для корректного определения путей.
  • WP-Cron не запускается. Проверьте системный cron и настройте DISABLE_WP_CRON в wp-config.php для вызова cron через системный планировщик.
  • Удаление критичных файлов. В коде удаляются только файлы старше 7 дней, чтобы не затронуть актуальные обновления.

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

  • Регулярно мониторьте размер директорий WooCommerce и логи сервера.
  • Для сайтов с высоким трафиком настройте системный cron вместо WP-Cron для стабильности.
  • При использовании плагинов очистки убедитесь, что они совместимы с WooCommerce и не удаляют нужные файлы.
  • Рассмотрите использование плагина Clearfy Pro для комплексной оптимизации и автоматизации очистки.

Сравнение вариантов автоматизации очистки WooCommerce

МетодПлюсыМинусыКомпромисс
PHP-код + WP-CronГибкость, не требует доп. плагиновЗависит от WP-Cron, может не сработать при низком трафикеНастроить системный cron для вызова WP-Cron
WP-CLI + системный cronНадёжно, работает независимо от трафикаТребуется SSH-доступ и базовые знания командной строкиИспользовать в продвинутых средах
Плагины очистки (например, Clearfy)Удобство, дополнительные функции оптимизацииМожет конфликтовать с кастомными задачамиИспользовать вместе с кастомными скриптами
Как удалить /privat/ из URL в WordPress без плагинов
19.06.2026
Решение проблемы безопасности WordPress при использовании плагинов
06.12.2025
Как создать подробный плагин для автоматического создания копий постов в WordPress
03.04.2026
Как отключить метод отправки писем PHP mail в WordPress и настроить SMTP
16.02.2026
Как избежать конфликтов между плагинами в WordPress
25.12.2025