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

Почему нужно автоматически удалять заказы в WooCommerce

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

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

Перед внедрением автоматического удаления важно определить:

  • Какие статусы заказов подлежат удалению (например, cancelled, failed, pending).
  • Какой период времени считать «старым» заказом (например, 30 дней с момента создания).
  • Необходим ли учет возвратов, отмен, или других бизнес-процессов.

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

SELECT post_status, COUNT(*) AS count FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;

Это поможет понять, сколько заказов каждого статуса хранится и нужно ли их чистить.

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

1. Создайте функцию для удаления заказов по статусу и дате

function wprus_delete_old_woocommerce_orders() {
    $statuses = array('wc-cancelled', 'wc-failed', 'wc-pending'); // Статусы для удаления
    $days = 30; // Возраст заказа в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    foreach ( $statuses as $status ) {
        $args = array(
            'post_type'      => 'shop_order',
            'post_status'    => $status,
            'date_query'     => array(
                array(
                    'column' => 'post_date',
                    'before' => $date_threshold,
                ),
            ),
            'posts_per_page' => -1,
            'fields'         => 'ids',
        );

        $orders = get_posts( $args );

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

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

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

add_action( 'wprus_daily_order_cleanup', 'wprus_delete_old_woocommerce_orders' );

3. Добавьте код в functions.php темы или в отдельный плагин

Лучше использовать собственный плагин, чтобы не потерять настройки при смене темы.

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

Чтобы проверить, что удаление работает:

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

Можно добавить временный лог в функцию:

error_log('Deleted order ID: ' . $order_id);

Чтобы отслеживать какие заказы удаляются.

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

  • Заказы не удаляются: проверьте, активен ли WP Cron, нет ли конфликтов с другими плагинами или ограничений на удаление.
  • Событие WP Cron не запускается: убедитесь, что на сайте есть посетители для запуска WP Cron, или настройте системный cron на сервере.
  • Удаляются не те заказы: проверьте правильность статусов (в WooCommerce статусы имеют префикс wc-).
  • Проблемы с производительностью: если заказов слишком много, разбейте удаление на несколько этапов с ограничением posts_per_page.

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

  • Удаляйте только заказы, которые точно не нужны, чтобы избежать потери данных.
  • Используйте транзакции или бэкапы базы перед массовым удалением.
  • Оптимизируйте запросы, ограничивая количество удаляемых заказов за один запуск.
  • Для больших магазинов рассмотрите использование сторонних плагинов с оптимизированным удалением (например, Clearfy Pro имеет функции чистки WooCommerce).

Сравнение подходов к удалению заказов WooCommerce

МетодПлюсыМинусы
Код с WP Cron (как в статье)Гибко, бесплатно, кастомизируемоТребует навыков, возможно нагрузка при большом объёме
Плагины очистки (Clearfy, WP-Optimize)Простота, дополнительные функции оптимизацииПлатные функции, меньше гибкости
Ручное удаление через админкуКонтроль, простотаНеэффективно при большом количестве заказов
WooCommerce: автоматическое удаление старых неоплаченных заказов
15.05.2026
WooCommerce: как изменить стиль кнопки «Добавить в корзину» при добавлении товара
07.06.2026
WooCommerce: как разрешить или запретить возврат товаров по ролям пользователей
19.04.2026
WooCommerce: как изменить стиль кнопки «Добавить в корзину» при добавлении товара
02.05.2026
WooCommerce: автоматическое удаление товаров по дате публикации
13.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше