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

|

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

В интернет-магазинах на WooCommerce накапливаются заказы и корзины, которые не были завершены или неактивны длительное время. Это приводит к росту размера базы данных, замедлению работы сайта и усложнению аналитики. Часто такие заказы имеют статус pending или failed, а корзины представлены в мета-данных пользователей или сессиях.

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

Как определить неактивные корзины и заказы в WooCommerce

Критерии неактивности могут быть разными, но обычно подходят следующие:

Проверка статуса заказов

Заказы можно получить так (пример для 7 дней):

$args = [
    'status' => ['pending', 'failed'],
    'date_created' => '<' . ( new WC_DateTime( '-7 days' ) )->format('Y-m-d H:i:s'),
    'limit' => -1,
];
$orders = wc_get_orders($args);

Проверка неактивных корзин (сессий)

WooCommerce хранит сессии в базе в таблице wp_woocommerce_sessions. Можно получить все сессии старше нужного времени и удалить их.

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

1. Удаление неактивных заказов

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

function wc_remove_inactive_orders( $days = 7 ) {
    $args = [
        'status' => ['pending', 'failed'],
        'date_created' => '<' . ( new WC_DateTime( "-{$days} days" ) )->format('Y-m-d H:i:s'),
        'limit' => -1,
    ];
    $orders = wc_get_orders($args);

    foreach ( $orders as $order ) {
        wp_delete_post( $order->get_id(), true );
    }
}

2. Удаление неактивных корзин (сессий)

Удаляем сессии старше 24 часов через прямой запрос к базе:

function wc_remove_expired_sessions( $hours = 24 ) {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $time_limit = time() - ( $hours * 3600 );
    $wpdb->query( $wpdb->prepare( "DELETE FROM $table WHERE session_expiry < %d", $time_limit ) );
}

3. Автоматизация с помощью WP-Cron

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

add_action('wc_cron_cleanup', function() {
    wc_remove_inactive_orders(7);
    wc_remove_expired_sessions(24);
});

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

Как проверить, что удаление сработало

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

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

Сравнение вариантов автоматической очистки

МетодПреимуществаНедостатки
Плагин (например, WP Optimize)Простота настройки, дополнительные функции оптимизацииМожет быть избыточным, нагрузка на сайт, не всегда гибкие настройки
Собственный код с WP-CronТочный контроль, легковесность, адаптация под требованияТребует навыков разработки, ответственность за ошибки
Ручное удаление через админкуПростота, безопасностьТрудозатратно, не автоматизировано
Как создать главный вывод текстовой информации в WordPress без плагинов
22.01.2026
Как автоматически удалять некорректные корзины и заказы в WooCommerce
29.04.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
15.05.2026
Как добавить AJAX в формы WordPress без плагинов
15.12.2025
Как запретить индексацию отдельных страниц WordPress без robots.txt
22.08.2026
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙