WooCommerce: автоматическое удаление товаров из отменённых заказов с логированием

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

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

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

Используем хуки WooCommerce для обработки статуса заказа

Для начала нужно поймать момент, когда заказ становится отменённым. Для этого используем хук woocommerce_order_status_cancelled. В обработчике удалим все позиции товаров из заказа и добавим запись в лог.

Пример рабочего кода в functions.php темы или в кастомном плагине

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

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

    $items = $order->get_items();
    if (empty($items)) return;

    // Лог для записи действий
    $log_file = WP_CONTENT_DIR . '/auto_remove_cancelled_orders.log';

    foreach ($items as $item_id => $item) {
        $product_name = $item->get_name();
        $quantity = $item->get_quantity();

        // Удаляем позицию из заказа
        $order->remove_item($item_id);

        // Записываем в лог
        $log_entry = date('Y-m-d H:i:s') . " - Удалён товар '{$product_name}' (кол-во: {$quantity}) из заказа №{$order_id}\n";
        file_put_contents($log_file, $log_entry, FILE_APPEND | LOCK_EX);
    }

    // Сохраняем изменения в заказе
    $order->save();
}

Объяснение кода

  • Хук woocommerce_order_status_cancelled срабатывает при смене статуса на "отменён".
  • Перебираем все товары заказа и удаляем каждую позицию через remove_item().
  • Логируем каждое удаление в файл wp-content/auto_remove_cancelled_orders.log для аудита.
  • Сохраняем обновлённый заказ методом save().

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

1. В админке WooCommerce перейдите в любой заказ и смените статус на "Отменён".
2. Обновите страницу и проверьте, что товары исчезли из позиции заказа.
3. Через FTP или файловый менеджер откройте файл wp-content/auto_remove_cancelled_orders.log и убедитесь, что там появились записи об удалении товаров с указанием времени и названия товаров.

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

  • Код не срабатывает при смене статуса: Проверьте, что добавляете хук в активную тему или плагин, и нет конфликтов с другими хуками, которые могут отменять статус.
  • Права на запись в лог файл отсутствуют: Убедитесь, что папка wp-content доступна для записи сервером. Иначе лог не создастся.
  • Товары не удаляются, но заказ обновляется: Проверьте, что используете метод remove_item() и потом save(). Ошибка может быть в неправильном использовании API WooCommerce.
  • Потеря данных из-за автоматического удаления: Перед внедрением убедитесь, что удаление товаров из отменённых заказов — действительно нужное поведение, иначе лучше использовать статус "возврат" без удаления позиций.

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

  • Логирование в файл удобно, но с ростом магазина файл может разрастаться. Настройте ротацию логов или используйте системное логирование через error_log.
  • Добавьте проверку nonce или прав пользователя, если планируете расширение функционала до фронтенда.
  • Для больших магазинов с высокой нагрузкой оптимизируйте код, чтобы не перегружать сервер при массовом обновлении заказов.
  • Используйте wp_schedule_event для периодической очистки отменённых заказов и связанных товаров, если не хотите делать это сразу при смене статуса.

Сравнение вариантов удаления товаров из отменённых заказов

МетодПлюсыМинусы
Удаление при смене статуса (код)Автоматизация, логирование, контрольРиск потери данных, требует правки кода
Удаление вручную в админкеПростота, контроль пользователяТрудозатратно, риск забыть
Плагин для управления заказамиУдобный интерфейс, дополнительные функцииНагрузка, возможные конфликты, лицензия
WooCommerce: как автоматически удалять отменённые заказы с помощью кода
04.06.2026
WooCommerce: как автоматически отключать отсутствующие варианты товаров
13.07.2026
WooCommerce: автоматическое очищение корзин и отменённых заказов
01.07.2026
WooCommerce: успешное отправление email после подтверждения заказа
31.05.2026
Как автоматически удалить старые записи в WordPress по дате
29.03.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.