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

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

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

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

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

1. Использование WP-Cron для регулярной проверки заказов

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

2. Пример кода для удаления заказов старше 30 дней со статусом «отменён»

function wc_delete_old_cancelled_orders() {
    $days = 30; // Срок в днях
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d', strtotime("-{$days} days")),
    );
    $args = array(
        'status' => 'cancelled',
        'date_query' => array($date_query),
        'limit' => -1, // без ограничений
        'return' => 'ids',
    );
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true — без возможности восстановления
    }
}

// Регистрация события в WP-Cron
add_action('wc_delete_old_cancelled_orders_hook', 'wc_delete_old_cancelled_orders');

// Планируем событие раз в сутки, если оно не запланировано
if (!wp_next_scheduled('wc_delete_old_cancelled_orders_hook')) {
    wp_schedule_event(time(), 'daily', 'wc_delete_old_cancelled_orders_hook');
}

3. Добавление кода в functions.php или отдельный плагин

Код лучше поместить в дочернюю тему functions.php или создать малый плагин для удобства управления и обновлений.

Проверка результата

  • После добавления кода и запуска WP-Cron (можно использовать плагин «WP Crontrol» для ручного запуска) проверьте базу данных или панель WooCommerce: заказы со статусом «отменён» старше 30 дней должны исчезнуть.
  • Для отладки можно добавить error_log внутри функции, чтобы убедиться в вызове и количестве удалённых заказов:
error_log('Удалено заказов: ' . count($orders));

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

  • Заказы не удаляются: проверьте, что WP-Cron работает (запустите вручную через WP Crontrol или curl-запросом к wp-cron.php).
  • Удаляются не те заказы: проверьте параметр 'status' и дату в date_query, возможно, стоит расширить или уточнить фильтр.
  • Проблемы с правами: функция wp_delete_post требует прав администратора, убедитесь, что скрипт выполняется с нужными привилегиями.
  • Отсутствие бэкапа: перед автоматическим удалением сделайте резервную копию базы данных, чтобы избежать потери данных.

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

  • Не удаляйте заказы сразу после их создания, используйте достаточный срок (например, 30 дней), чтобы избежать потери важных данных.
  • Ограничивайте количество удаляемых заказов в одном запуске, если база очень большая, чтобы снизить нагрузку (например, добавьте параметр 'limit' => 100 и запускайте функцию чаще).
  • Используйте транзакции и логи для отката в случае ошибок, если реализуете более сложные решения.
  • Для массового удаления можно использовать WP-CLI с командами, но это требует серверного доступа.

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

СпособПлюсыМинусыКогда использовать
Пользовательский код с WP-CronЛегко кастомизировать, нет лишних плагиновТребует навыков программиста, зависит от WP-CronДля точечной автоматизации без нагромождения плагинов
Плагины (например, WooCommerce Order Cleanup)Простота настройки, готовые функцииМогут конфликтовать, нагружать сайтДля быстрого решения без программирования
WP-CLI скриптыОчень быстро и эффективно для больших базТребует доступа к серверу и навыков командной строкиДля опытных администраторов и при больших объемах данных
WooCommerce: автоматическое удаление заказов по неактивности
28.05.2026
WooCommerce: автоматическое удаление заказов после отмены или возврата
16.05.2026
Как добавить автоподсказки в поиск WordPress
05.01.2026
Как удалить пустые термины таксономий в WordPress
01.04.2026
Как избежать конфликтов плагинов в WordPress: практические советы и примеры кода
07.04.2026