Проблема: накопление устаревших файлов обновлений и загрузок в WooCommerce
WooCommerce хранит в файловой системе и базе данных множество временных файлов: обновления, временные загрузки, логи и временные кэши. Со временем это приводит к захламлению сервера, замедлению бэкапов и риску превышения квот хостинга. Особенно актуально для магазинов с большим каталогом и частыми обновлениями.
Типичные проявления проблемы:
- Папка
wp-content/uploads/wc-logsрастёт до гигабайт - Временные файлы обновлений WooCommerce в
wp-content/upgradeне удаляются - Загружаемые для обновлений архивы остаются и занимают место
- Медленная работа сайта из-за большого количества временных файлов
Диагностика: как проверить наличие и объём мусорных файлов WooCommerce
Подключитесь к серверу через SSH или используйте файловый менеджер хостинга. Просмотрите следующие директории:
wp-content/uploads/wc-logs– логи WooCommercewp-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) | Удобство, дополнительные функции оптимизации | Может конфликтовать с кастомными задачами | Использовать вместе с кастомными скриптами |