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

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

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

Как определить неоплаченные заказы для удаления

В WooCommerce неоплаченные заказы обычно имеют статус pending или on-hold. При этом важно не удалять заказы, которые могут быть в процессе оплаты или ожидают подтверждения.

Для диагностики можно выполнить SQL-запрос в базе данных или использовать WP-CLI для вывода таких заказов:

wp post list --post_type=shop_order --post_status=pending,on-hold --field=ID,post_date

Пошаговое решение: создание cron-задачи для удаления неоплаченных заказов

1. Добавление функции удаления заказов в functions.php

function wptask_delete_unpaid_orders() {
    $args = [
        'status' => ['pending', 'on-hold'],
        'date_created' => '<' . ( time() - DAY_IN_SECONDS ),
        'limit' => -1,
        'return' => 'ids',
    ];
    $orders = wc_get_orders( $args );

    foreach ( $orders as $order_id ) {
        wp_trash_post( $order_id ); // поместить заказ в корзину
        // Для полного удаления используйте wp_delete_post( $order_id, true );
    }
}

2. Регистрация Cron-задачи

Добавьте хук для запуска функции раз в сутки:

if ( ! wp_next_scheduled( 'wptask_daily_delete_unpaid_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wptask_daily_delete_unpaid_orders' );
}
add_action( 'wptask_daily_delete_unpaid_orders', 'wptask_delete_unpaid_orders' );

3. Тестовый запуск

Для проверки работы функции вызовите wptask_delete_unpaid_orders() вручную в админке или через WP-CLI:

wp eval 'wptask_delete_unpaid_orders();'

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

  • Через 24 часа после создания неоплаченного заказа он должен автоматически переместиться в корзину (или удалиться).
  • Проверьте список заказов в WooCommerce: неоплаченные старше 24 часов должны исчезнуть.
  • Для отладки можно добавить логирование удаляемых заказов, например, через error_log().

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

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

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

  • Не удаляйте заказы сразу, сначала лучше перемещать в корзину — это позволит восстановить ошибочно удалённые заказы.
  • Запланируйте задачу на период с низкой нагрузкой сайта, чтобы избежать замедления.
  • Добавьте логирование или уведомления на email для контроля работы скрипта.
  • При большом количестве заказов используйте постраничный перебор с limit и offset, чтобы избежать превышения лимита памяти.
  • Рассмотрите использование WP Cron только как запасной вариант, а для стабильности лучше настроить системный cron на сервере.

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

МетодПлюсыМинусыКомпромисс
Удаление через плагин (например, WooCommerce Cleanup) Простота установки, интерфейс Дополнительная нагрузка, ограниченная кастомизация Подходит для новичков и быстрых решений
Код в functions.php с WP Cron Полный контроль, нет лишних плагинов Требует навыков, возможны проблемы с WP Cron Лучше для опытных разработчиков
Системный cron и WP-CLI Надёжность, точность расписания Нужен доступ к серверу, сложнее в настройке Оптимально для больших магазинов
Как исправить ошибку 500 в WooCommerce после обновления
18.04.2026
Автоматическое удаление неиспользуемых таксономий в WordPress
01.04.2026
WooCommerce: автоматическое удаление неоплаченных заказов через cron и код
02.07.2026
Как создать автоматическую ответную форму в WordPress
06.01.2026
Автоматический импорт пользователей в WordPress через CSV с примером кода
18.01.2026