Автоматическое удаление неоплаченных заказов в 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Крупные проекты с большим числом заказов
Плагины для очистки заказовУдобство, графический интерфейсЧасто платные, могут влиять на производительностьПользователи без навыков программирования
Как использовать WPScan для быстрого аудита безопасности WordPress
25.01.2026
Как создать собственный плагин для автоматического удаления спама в комментариях WordPress
18.11.2025
Автоматическое удаление отказанных и заблокированных заказов WooCommerce с помощью кода
02.06.2026
Как решить проблему неудачного удаления отказанных заказов WooCommerce с помощью кода
28.04.2026
Отслеживание последних изменений в WordPress для безопасности сайта
31.01.2026