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

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

На WooCommerce-сайтах со временем накапливаются неоплаченные заказы, которые занимают место в базе данных и могут создавать путаницу в админке. Особенно это актуально для магазинов с высокой посещаемостью и большим количеством брошенных корзин. Удаление таких заказов вручную неудобно и требует постоянного контроля.

Типичная задача — автоматически очищать неоплаченные заказы, которые не были оплачены в течение определённого времени (например, 24 часа).

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

В WooCommerce неоплаченные заказы обычно имеют статус pending (ожидание оплаты) или failed (отказ платежа). Можно ориентироваться на дату создания заказа — если прошло больше 24 часов, заказ можно считать устаревшим и удалить.

Для проверки в базе данных заказы имеют тип записи shop_order и хранятся в таблице wp_posts (префикс может отличаться).

Пошаговое решение: автоматическое удаление неоплаченных заказов с помощью WP-Cron

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

function wpcourse_delete_old_unpaid_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed'),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '24 hours ago',
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );

    $orders = get_posts($args);

    if (empty($orders)) {
        return;
    }

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление без перемещения в корзину
    }
}

2. Регистрируем WP-Cron событие для ежедневного запуска

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

add_action('wpcourse_daily_order_cleanup', 'wpcourse_delete_old_unpaid_orders');

3. Как добавить код в сайт

Лучше всего помещать этот код в файл functions.php активной темы или в отдельный кастомный плагин, чтобы избежать потери при обновлениях темы.

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

  • Создайте тестовый заказ с статусом pending или failed старше 24 часов (можно вручную изменить дату в базе для теста).
  • Запустите WP-Cron вручную с помощью плагина WP Crontrol или дождитесь автоматического запуска в полночь.
  • Убедитесь, что заказ удалился из админки WooCommerce и таблицы wp_posts.
  • Проверьте логи сайта на ошибки, если заказ не удалился.

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

  • Заказы не удаляются: Возможно, WP-Cron не запускается. Проверьте работу Cron, запустите вручную через WP Crontrol или настройте системный Cron.
  • Удаляются нужные заказы: Проверьте временные рамки в date_query и статусы заказов.
  • Ошибки прав доступа: Убедитесь, что функция wp_delete_post вызывается с параметром true для полного удаления и что у пользователя, под которым выполняется код, есть права на удаление заказов.

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

  • Запускайте удаление заказов не чаще одного раза в сутки, чтобы не нагружать базу.
  • Перед удалением заказов можно создать резервную копию базы данных, особенно на живом магазине.
  • Для сайтов с большим количеством заказов ограничьте выборку в get_posts и запускайте удаление частями, чтобы избежать таймаутов.
  • Запретите удаление заказов с важными статусами (например, processing, completed), чтобы не потерять данные.

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

МетодПреимуществаНедостатки
Плагин (например, WooCommerce Order Cleanup)Простая настройка, поддержка интерфейса, регулярные обновленияДополнительная нагрузка, возможные конфликты, может быть платным
Код (WP-Cron + wp_delete_post)Лёгкий, настраиваемый, без лишних плагинов, полный контрольНужны базовые знания PHP, самостоятельное тестирование и поддержка
Как изменить автозаголовки постов в WordPress
20.02.2026
Как отключить изменение стоимости товара в WooCommerce после оформления заказа
30.06.2026
Как удалить псевдо-дублированный контент в WordPress
20.12.2025
Как изменить структуру ссылок в WordPress без плагинов
03.03.2026
Как создать многоязычный сайт на WordPress с помощью Polylang
23.01.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас