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

Диагностика проблемы неактивных заказов в WooCommerce

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

Какие статусы заказов считаются неактивными?

  • pending — ожидает оплаты;
  • on-hold — приостановлен;
  • failed — неудачная оплата;
  • cancelled — отменён.

Эти статусы обычно не требуют хранения более 30 дней, после чего их можно удалить автоматически.

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

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

1. Добавляем хук на запуск крон-задачи

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

2. Функция удаления заказов

add_action('wc_cleanup_old_orders_daily', function() {
    $args = [
        'limit' => -1,
        'status' => ['pending', 'on-hold', 'failed', 'cancelled'],
        'date_created' => '<' . (new DateTime('-30 days'))->format('Y-m-d H:i:s'),
        'return' => 'ids',
    ];
    
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Удаляем навсегда
    }
});

3. Добавляем отмену крон-задачи при деактивации темы/плагина

register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wc_cleanup_old_orders_daily');
});

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

  • Создайте тестовый заказ со статусом pending или cancelled с датой создания более 30 дней назад (можно вручную изменить дату в базе или через SQL-запрос).
  • Запустите крон-задачу вручную, используя WP-CLI или плагин WP Crontrol, вызвав событие wc_cleanup_old_orders_daily.
  • Проверьте, удалился ли заказ из списка заказов в WooCommerce.
  • В логах сервера или плагина отладки можно добавить error_log() вызовы внутри функции для мониторинга процесса.

Частые ошибки и способы их устранения

  • Крон-задача не запускается: Убедитесь, что на сайте работает WP-Cron (проверьте DISABLE_WP_CRON в wp-config.php). Можно инициировать запуск через внешние сервисы или настроить системный cron.
  • Заказы не удаляются: Проверьте, что в аргументах wc_get_orders правильно указан формат даты и статусы. Также убедитесь, что wp_delete_post вызывается с параметром true для полного удаления.
  • Удаление лишних заказов: Проверьте логику фильтрации по дате и статусам. Можно добавить дополнительную проверку по мета-данным заказов, чтобы не удалить важные записи.
  • Повышенная нагрузка при массовом удалении: Если заказов очень много, стоит разбить удаление на партии по 50–100 заказов с помощью array_chunk и запускать в несколько итераций.

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

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

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

МетодПреимуществаНедостатки
Плагин (например, WooCommerce Order Cleanup)Удобный интерфейс, быстрое внедрениеМожет добавлять нагрузку, ограниченные настройки
Код в functions.php (WP-Cron)Гибкость, отсутствие сторонних зависимостейТребует навыков разработки, нужно контролировать производительность
WP-CLI скриптМаксимальная производительность, удобство при больших объемахТребует SSH-доступа и навыков командной строки
Автопостинг из Twitter в WordPress с фильтрацией и обработкой контента
13.04.2026
Как добавить иконки социальных сетей в меню WordPress
17.02.2026
WooCommerce: как автоматически удалять неактивные заказы по срокам
07.07.2026
Как создать социальный чат в WordPress с применением WPRemark
25.02.2026
Как отключить переадресацию в WordPress: практические решения
01.01.2026