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

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

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

Нужно автоматизировать удаление этих файлов, чтобы не накапливать «мусор» и не открывать доступ к ненужным данным.

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

1. Определяем событие отмены заказа

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

2. Получаем файлы, связанные с заказом

Файлы обычно хранятся как мета-данные к заказу или к товарам в заказе. Нужно точно знать, где хранится путь к файлу. Рассмотрим пример, когда путь к файлу хранится в мета-данных заказа с ключом _custom_upload_path.

3. Удаляем файлы с сервера

Используем стандартные PHP-функции для удаления файлов, предварительно проверяя наличие файла и безопасность пути.

add_action('woocommerce_order_status_cancelled', 'wpupload_delete_uploaded_files_after_cancel', 10, 1);
function wpupload_delete_uploaded_files_after_cancel($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    // Получаем массив путей к загруженным файлам из мета заказа
    $file_paths = $order->get_meta('_custom_upload_paths'); // например, массив путей
    if (empty($file_paths) || !is_array($file_paths)) return;

    foreach ($file_paths as $file_path) {
        // Безопасная проверка пути
        $upload_dir = wp_get_upload_dir();
        $base_dir = $upload_dir['basedir'];
        $full_path = realpath($file_path);

        if ($full_path && strpos($full_path, $base_dir) === 0 && file_exists($full_path)) {
            unlink($full_path); // удаляем файл
        }
    }

    // Опционально: очищаем мета по файлам, чтобы не было ссылок
    $order->delete_meta_data('_custom_upload_paths');
    $order->save();
}

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

  • Создайте тестовый заказ с загрузкой файлов, убедитесь, что путь к файлам сохраняется в мета _custom_upload_paths.
  • Отмените заказ через админку WooCommerce.
  • Проверьте, что файлы по указанным путям удалены с сервера.
  • Проверьте, что мета данные заказа с путями файлов удалены.
  • Логи сервера и ошибки PHP не должны содержать сообщений об ошибках удаления.

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

  • Файлы не удаляются: Проверьте правильность путей в мета данных и права доступа на сервере. PHP-процесс должен иметь право на удаление файлов.
  • Удаляются не те файлы: Используйте realpath() и проверку вхождения пути в wp_get_upload_dir()['basedir'] для безопасности.
  • Функция не вызывается: Убедитесь, что хук woocommerce_order_status_cancelled срабатывает. Можно добавить логирование или временно error_log() внутри функции.
  • Мета данные не содержат пути: Проверьте, что при загрузке файлов пути корректно сохраняются в заказ.

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

  • Всегда проверяйте полный путь к файлу через realpath() и убеждайтесь, что он находится в папке загрузок WordPress (wp-content/uploads), чтобы исключить удаление критичных системных файлов.
  • Сохраняйте пути к файлам в виде относительных путей или используя API WordPress для лучшей переносимости и безопасности.
  • Удаление файлов стоит выполнять в момент смены статуса, чтобы не создавать дополнительную нагрузку на сервер в фоне.
  • Если файлов много, подумайте о пакетной обработке с WP_Cron для снижения нагрузки.

Альтернативы: плагин vs код

МетодПлюсыМинусы
Самописный код (хук и функция) Легковесность, контроль, отсутствие лишних плагинов, гибкость под свои нужды Требует навыков PHP, можно допустить ошибки, поддержка на вас
Плагин для очистки WooCommerce Простота установки, поддержка разработчиков, функционал сразу готов Может быть избыточным, не всегда гибким, нагрузка, совместимость
Как использовать WP Upload Dir для работы с файлами в WordPress
01.12.2025
Как добавить поддержку потоковой записи видео в WordPress
30.12.2025
Как использовать WP Uploads для хранения пользовательских файлов в WordPress
16.03.2026
Как удалить загруженные файлы из WooCommerce после отмены заказа
14.05.2026
Как удалить повторяющиеся файлы из медиабиблиотеки WordPress с помощью кода
02.04.2026

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