Автоматическое удаление неоплаченных заказов в WooCommerce по срокам

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

На больших интернет-магазинах, работающих на WooCommerce, часто возникает проблема с накоплением неоплаченных заказов. Это может замедлять работу административной панели, увеличивать размер базы данных и мешать аналитике. Неоплаченные заказы — это заказы со статусом pending или on-hold, которые не были завершены или отменены.

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

wp wc order list --status=pending,on-hold --fields=ID,post_date,status --format=table

Если количество таких заказов превышает несколько сотен — это повод оптимизировать процесс их очистки.

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

1. Определение срока хранения неоплаченных заказов

Рекомендуется удалять неоплаченные заказы старше 7-14 дней. Этот период можно задать в настройках или жестко прописать в коде.

2. Создание функции для удаления старых заказов

Добавьте следующий код в файл functions.php активной темы или в собственный плагин:

function wc_delete_old_unpaid_orders() {
    $days = 14; // Количество дней хранения неоплаченных заказов
    $date = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    $args = array(
        'status' => array('pending', 'on-hold'),
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( ! empty( $orders ) ) {
        foreach ( $orders as $order_id ) {
            wp_delete_post( $order_id, true );
        }
    }
}

3. Запуск функции по расписанию (WP-Cron)

Для автоматизации добавьте следующий код в functions.php:

if ( ! wp_next_scheduled( 'wc_delete_old_unpaid_orders_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'wc_delete_old_unpaid_orders_daily' );
}

add_action( 'wc_delete_old_unpaid_orders_daily', 'wc_delete_old_unpaid_orders' );

Этот код запускает очистку раз в сутки.

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

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

  • В панели WooCommerce — раздел «Заказы» с фильтром по статусу.
  • С помощью WP-CLI:
wp wc order list --status=pending,on-hold --format=ids

Если скрипт сработал корректно, количество заказов старше 14 дней с этими статусами должно стать нулём.

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

  • Заказы не удаляются: Проверьте, что функция wc_get_orders возвращает ID заказов, а не объекты. В аргументах должен быть параметр 'return' => 'ids'.
  • WP-Cron не срабатывает: Убедитесь, что на сайте активно выполнение WP-Cron, или настройте реальный cron-задачу на сервере, вызывающую wp-cron.php.
  • Удаление происходит, но заказы остаются в базе: Возможно, стоит использовать wp_delete_post( $order_id, true ) с принудительным удалением из базы (второй параметр true).
  • Производительность падает при большом количестве заказов: ограничьте количество заказов на удаление за один запуск, например, добавив параметр 'limit' => 100 и выполняйте очистку чаще.

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

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

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

МетодПлюсыМинусыКогда использовать
WP-Cron + код в functions.phpАвтоматизация, простота внедренияЗависимость от WP-Cron, нагрузка при больших данныхМалые и средние магазины
WP-CLI скрипт в системном cronНадежность, производительностьТребует доступа к серверу и знаний CLIКрупные проекты с большим числом заказов
Плагины для очистки заказовУдобство, графический интерфейсЧасто платные, могут влиять на производительностьПользователи без навыков программирования
Как защитить WordPress от удаления аккаунта администратора
09.04.2026
Настройка и управление ролями пользователей в WordPress: практические решения и примеры кода
23.12.2025
Аудит и настройка прав доступа к файлам WordPress
15.04.2026
Автоматическое удаление отключённых и неоплаченных заказов в WooCommerce
17.05.2026
Как решить проблему неудачного удаления отказанных заказов WooCommerce с помощью кода
21.04.2026