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

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

В крупных WooCommerce-магазинах накапливается много старых заказов, которые уже не важны для аналитики или ведения учета. Это может замедлять работу админки и увеличивать размер базы данных. Ручное удаление занимает много времени, а плагины часто не дают нужной гибкости. Поэтому задача — автоматизировать удаление заказов по определённым статусам (например, отменённые, просроченные) и по дате создания.

Как реализовать автоматическое удаление заказов в WooCommerce через WP-Cron

Шаг 1. Создание функции для удаления заказов

Функция должна искать заказы с нужными статусами и датами, затем удалять их через стандартные методы WooCommerce, чтобы корректно очистить связанные данные.

function wpdev_delete_old_wc_orders() {
    $statuses_to_delete = array('cancelled', 'failed'); // Заказы для удаления
    $date_before = date('Y-m-d H:i:s', strtotime('-30 days')); // Старше 30 дней

    $args = array(
        'limit'        => -1,
        'status'       => $statuses_to_delete,
        'date_created' => '<' . $date_before,
        'return'       => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        $order = wc_get_order($order_id);
        if ($order) {
            wp_delete_post($order_id, true); // Полное удаление
        }
    }
}

Шаг 2. Добавление задачи в WP-Cron для периодического запуска

Добавим ежесуточное событие, которое будет запускать функцию удаления.

add_action('wpdev_daily_order_cleanup', 'wpdev_delete_old_wc_orders');

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

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

  • Проверьте наличие события WP-Cron в разделе Tools > Cron Events (для этого можно использовать плагин WP Crontrol).
  • Создайте тестовые заказы со статусом cancelled или failed и датой старше 30 дней, запустите вручную функцию wpdev_delete_old_wc_orders() через консоль WP CLI или временно вызовите ее в шаблоне.
  • Убедитесь, что заказы полностью удалены из базы (таблица wp_posts и wp_postmeta).
  • Проверьте, что в админке WooCommerce эти заказы больше не отображаются.

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

  • Заказы не удаляются: Проверьте, что функция подключена и вызывается из WP-Cron. Используйте error_log() для отладки.
  • Удаляются не те заказы: Проверьте, что статус и дата фильтруются корректно. В запросе wc_get_orders() параметр status должен быть массивом.
  • WP-Cron не срабатывает: На некоторых хостингах WP-Cron отключен. Проверьте это, возможно, потребуется настроить системный cron.
  • Потеря данных: Убедитесь, что удаляете только заказы, которые действительно можно удалить (например, отменённые и старше определённого срока).

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

  • Всегда делайте резервную копию базы перед внедрением автоматического удаления.
  • Ограничивайте количество удаляемых заказов за один запуск (например, параметр limit в wc_get_orders()), чтобы не перегружать сервер.
  • Используйте транзакции базы, если есть возможность, для целостности данных.
  • Для больших магазинов лучше запускать удаление в ночное время или через отдельный скрипт CLI.

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

ВариантПреимуществаНедостатки
Плагин (например, WP Bulk Delete)Простой интерфейс, нет необходимости писать кодМожет не поддерживать тонкую фильтрацию по статусам и датам, нагрузка на сайт
Код (как в статье)Максимальный контроль и гибкость, легко автоматизироватьТребует навыков разработки, возможны ошибки
Компромисс (код + плагин WP Crontrol)Управление расписанием через UI, кастомная логика удаленияНужно устанавливать дополнительные плагины, чуть сложнее настройка
Как добавить поддержку REST API в своем плагине WordPress
13.12.2025
WooCommerce: как автоматически удалять товары при пустой корзине
29.05.2026
Как использовать хуки для изменения функциональности WordPress
15.04.2026
WooCommerce: как автоматически удалять заказы по статусу и дате
17.06.2026
Как создать автоматический импорт данных из Excel в WordPress
19.03.2026