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

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

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

Какие заказы стоит удалять

  • Статусы: «отменён», «ожидает оплаты», «в ожидании» (pending, cancelled, on-hold).
  • Возраст заказа: например, старше 30 дней.
  • Заказы без оплаты и без активности со стороны клиента.

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

WooCommerce не имеет встроенной функции очистки старых заказов, поэтому реализуем это самостоятельно через WP-Cron и пользовательскую функцию.

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

function wpassist_delete_old_wc_orders() {
    $days = 30; // Удалять заказы старше 30 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = [
        'limit'        => -1,
        'status'       => ['pending', 'cancelled', 'on-hold'],
        'date_created' => '<' . $date,
        'return'       => 'ids',
    ];

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // Полное удаление заказа
        }
    }
}

2. Регистрируем WP-Cron задачу

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

add_action('wpassist_daily_order_cleanup', 'wpassist_delete_old_wc_orders');

3. Как отключить задачу при необходимости

function wpassist_clear_order_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpassist_daily_order_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpassist_daily_order_cleanup');
    }
}

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

Чтобы убедиться, что очистка работает:

  • Создайте тестовый заказ с нужным статусом и датой старше 30 дней (через phpMyAdmin или плагины для редактирования даты заказа).
  • Запустите задачу вручную, вызвав функцию wpassist_delete_old_wc_orders() или с помощью плагина для управления WP-Cron (например, WP Crontrol).
  • Проверьте, что заказ удалён из админки WooCommerce и таблицы wp_posts (post_type = shop_order).

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

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

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

  • Удаляйте заказы только с проверенными статусами, чтобы не потерять важные данные.
  • Запускайте очистку вне пиковых нагрузок, чтобы не замедлять сайт.
  • Для больших сайтов используйте пакетную обработку, чтобы не перегружать сервер одной командой.
  • Создайте резервную копию базы перед внедрением автоматического удаления.
  • Если хотите сохранить статистику, рассмотрите вместо удаления перевод заказа в архивный статус.

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

МетодПлюсыМинусы
WP-Cron + собственный кодГибкость, без плагинов, можно кастомизироватьЗависит от посещаемости сайта, требует навыков кодирования
Плагины для очистки заказовПростота настройки, готовые функцииМогут нагружать сайт, не всегда гибко
Ручное удаление через админкуПолный контрольТрудоемко, не автоматизировано
Как удалить неиспользуемые метаданные в WordPress для оптимизации базы данных
29.12.2025
Как создать автозаполняемое поле в формах WordPress с примерами кода
11.03.2026
WooCommerce: почему автоматическое удаление неактивных заказов по расписанию не работает и как это исправить
17.07.2026
WooCommerce: автоматическое изменение стоимости товаров по расписанию
29.05.2026
Как настроить автообновления плагинов WordPress без риска поломок
17.02.2026