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 для расширения функциональности сайта
06.11.2025
WooCommerce: как настроить отправку писем при массовом изменении статуса заказов
11.06.2026
Как создать комплексный фильтр для записей WordPress с несколькими условиями
27.02.2026
Как создать эксклюзивный сайт на WordPress с поддержкой подписки и доступом к контенту
30.03.2026
Как добавить поддержку PHP 8 в WordPress без проблем
15.04.2026
×

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

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

пишет статьи

готовит SEO

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

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