Как автоматически удалять файлы WooCommerce после отмены заказа

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

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

Диагностика проблемы

Чтобы понять, что файлы не удаляются, проверьте следующие моменты:

  • В медиабиблиотеке WordPress или в папке wp-content/uploads остаются файлы, связанные с отменёнными заказами.
  • В настройках WooCommerce отсутствует автоматический механизм удаления файлов после отмены заказа.
  • Файлы доступны по URL даже после отмены заказа, что может привести к несанкционированному доступу.

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

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

1. Использование хука woocommerce_order_status_cancelled

Этот хук срабатывает при изменении статуса заказа на «отменён». Мы можем получить вложения цифровых товаров и удалить их из файловой системы.

2. Пример кода для functions.php вашей темы или в кастомном плагине

add_action('woocommerce_order_status_cancelled', 'delete_files_after_order_cancelled', 10, 1);
function delete_files_after_order_cancelled($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);
    if (!$order) return;

    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        if (!$product) continue;

        // Проверяем, есть ли цифровые файлы
        $downloads = $product->get_downloads();
        foreach ($downloads as $download) {
            $file_path = str_replace(wp_upload_dir()['baseurl'], wp_upload_dir()['basedir'], $download->get_file());
            if (file_exists($file_path)) {
                unlink($file_path); // Удаляем файл
            }
        }
    }
}

Объяснение: код получает все цифровые загрузки в заказе, преобразует URL в путь на сервере и удаляет файлы, если они существуют.

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

  • Создайте тестовый заказ с цифровым товаром и загрузите файл.
  • Отмените заказ через панель администратора WooCommerce.
  • Проверьте, что файл удалён из папки uploads (например, через FTP или файловый менеджер хостинга).
  • Убедитесь, что файл недоступен по прежнему URL.

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

  • Файлы не удаляются: проверьте права доступа на папку uploads, PHP должен иметь разрешение на удаление файлов.
  • Некорректное определение пути к файлу: убедитесь, что str_replace правильно заменяет URL на путь, особенно если используется CDN или нестандартная структура.
  • Удаляются не те файлы: код удаляет только файлы цифровых загрузок из заказа — проверьте, что в товаре действительно настроены цифровые загрузки.

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

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

Сравнение способов удаления файлов после отмены заказа

МетодПлюсыМинусы
Ручное удалениеПростота, нет риска ошибочного кодаТрудозатратно, легко забыть, не подходит для больших магазинов
Кастомный код (хуки WooCommerce)Автоматизация, точечное удаление нужных файловТребует тестирования, возможны ошибки при неправильных правах
Плагины для очистки файловГотовые решения, дополнительные функцииМожет создавать нагрузку, не всегда точечное удаление
Как добавить проверку вирусов при загрузке файлов в WordPress
26.03.2026
Как использовать WP Upload Dir для работы с файлами в WordPress
01.12.2025
Как установить ограничение на размер файлов в WordPress при загрузке
10.01.2026
Как использовать WP Upload Dir для разделения файлов в WordPress
25.02.2026
Автоматическое удаление неиспользуемых вариантов товаров в WooCommerce
11.05.2026

wp upload - это директория в WP для загрузки файлов. Подробнее про загрузку файлов в админку можно почитать на этой странице.