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

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

WooCommerce не предусматривает удаление заказов по статусу из коробки. С течением времени накапливаются заказы со статусами «отменён», «в ожидании оплаты» или «отклонён», которые не нужны в админке и замедляют работу сайта и отчётов. Важно уметь автоматизировать удаление таких заказов, чтобы поддерживать базу данных в порядке и не нагружать сервер.

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

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

Чаще всего удаляют заказы с такими статусами: cancelled, failed, pending. Можно выбрать один или несколько.

2. Создаём функцию удаления заказов

Пример функции для удаления заказов по статусу с использованием WP_Query и WP_Trash:

function wpbook_delete_orders_by_status($statuses = array('cancelled', 'failed', 'pending')) {
    if (empty($statuses)) {
        return;
    }

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array_map(function($status) { return 'wc-' . $status; }, $statuses),
        'posts_per_page' => 100,
        'fields'         => 'ids',
        'no_found_rows'  => true
    );

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return;
    }

    foreach ($query->posts as $order_id) {
        wp_trash_post($order_id);  // перемещаем заказ в корзину
    }
}

3. Автоматизация с помощью WP-Cron

Чтобы удалять заказы регулярно, добавим событие в WP-Cron:

function wpbook_schedule_order_deletion() {
    if (!wp_next_scheduled('wpbook_delete_orders_event')) {
        wp_schedule_event(time(), 'daily', 'wpbook_delete_orders_event');
    }
}
add_action('wp', 'wpbook_schedule_order_deletion');

add_action('wpbook_delete_orders_event', function() {
    wpbook_delete_orders_by_status(['cancelled', 'failed']);
});

Как проверить, что удаление работает

  • Через админку WooCommerce в разделе «Заказы» проверьте, что заказы со статусами «Отменён» и «Неудавшийся» исчезают после запуска cron.
  • Для ручного теста вызовите функцию wpbook_delete_orders_by_status(['cancelled']) через WP-CLI или временный код.
  • Проверьте таблицу wp_posts в базе данных: заказы должны получить статус trash (корзина).

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

  • Заказы не удаляются: проверьте, что статусы указаны правильно, с префиксом wc- в запросе.
  • WP-Cron не запускается: на некоторых серверах wp-cron требует внешнего триггера (например, через системный cron).
  • Удаление не происходит полностью: wp_trash_post только перемещает в корзину. Для окончательного удаления используйте wp_delete_post($order_id, true), но будьте осторожны с потерей данных.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Не удаляйте заказы с важными статусами, например, processing или completed.
  • Для больших магазинов делайте удаление пакетами по 50–100 заказов, чтобы не перегружать сервер.
  • Логируйте удалённые заказы для аудита, например, добавив запись в файл или базу.
  • Используйте плагин Clearfy Pro для дополнительной оптимизации и очистки WooCommerce.

Сравнение способов удаления заказов WooCommerce

СпособПлюсыМинусы
Ручное удаление в админке Просто, не требует кода Много времени при большом количестве заказов
Код с WP_Query и wp_trash_post Автоматизация, контроль через код Требует знаний PHP, не удаляет сразу из базы
wp_delete_post с принудительным удалением Полное удаление из базы Риск потери данных, без возможности восстановления

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать пользовательские типы записей (CPT) в WordPress с примером кода
22.03.2026
Как использовать WP хуки для автоматического изменения цен в WooCommerce
12.05.2026
Как создать автоматическую защиту от спама на формы WordPress без CAPTCHA
11.12.2025
Автоматическое удаление товаров WooCommerce после первого заказа
13.07.2026
Как отключить автопроигрывание видео в WordPress: практические методы
29.01.2026
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙