WooCommerce: автоматическое удаление неактивных корзин и заказов

|

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

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

Проблема особенно заметна, если в WooCommerce не настроена автоматическая очистка устаревших заказов и корзин. Без регулярного удаления таких записей база данных со временем становится громоздкой и медленной.

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

В WooCommerce корзина пользователя временно хранится в сессии и куках, а также в базе данных в виде заказов со статусом pending или failed. Заказы, которые не были оплачены или подтверждены, считаются неактивными.

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

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed') ORDER BY post_date ASC;

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

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

1. Удаление устаревших заказов через WP Cron

Добавим в functions.php вашей темы или в кастомный плагин следующий код, который будет удалять заказы со статусом pending старше 7 дней:

function wc_delete_old_pending_orders() {
    global $wpdb;
    $days = 7;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем ID заказов со статусом wc-pending старше $days
    $orders = $wpdb->get_col( $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'wc-pending' AND post_date < %s",
        $date
    ) );

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

// Регистрируем cron задачу
add_action( 'wc_cleanup_old_orders_hook', 'wc_delete_old_pending_orders' );

// Запускаем cron при инициализации, если не зарегистрирован
function wc_schedule_old_orders_cleanup() {
    if ( ! wp_next_scheduled( 'wc_cleanup_old_orders_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_cleanup_old_orders_hook' );
    }
}
add_action( 'wp', 'wc_schedule_old_orders_cleanup' );

2. Очистка сессий и корзин WooCommerce

WooCommerce хранит данные корзин в сессиях, которые также со временем нужно очищать. Для этого используйте встроенную функцию WooCommerce wc_session_cleanup(). Она вызывается при активации плагина, но для регулярной очистки можно добавить аналогичный cron:

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

add_action( 'wc_cleanup_sessions_hook', function() {
    if ( class_exists( 'WC_Session_Handler' ) ) {
        WC()->session->cleanup_sessions();
    }
} );

Однако вызов WC()->session->cleanup_sessions() напрямую не всегда срабатывает, т.к. WC()->session инициализируется только при работе фронтенда. Для надежности лучше использовать WP CLI или плагины, например, Clearfy Pro, который умеет чистить базу.

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

do_action('wc_cleanup_old_orders_hook');
do_action('wc_cleanup_sessions_hook');

и посмотрите, как изменится база данных.

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

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

Сравнение вариантов реализации очистки заказов и корзин

МетодПлюсыМинусыПример использования
Код в functions.php с WP Cron Контроль, гибкость, бесплатно Зависит от WP Cron, требует кодинга Пример кода выше
WP CLI команда Надежность, можно запускать вручную Требует SSH доступа wp wc cleanup sessions (плагин или кастомная команда)
Плагин (например, Clearfy Pro) Автоматизация, удобный интерфейс, дополнительные функции Платный, зависит от стороннего кода Clearfy Pro
Как удалить пустые категории в WordPress без плагинов
30.01.2026
WooCommerce: как программно удалять неактивные корзины и заказы
22.05.2026
Как автоматически удалять пустые термины в WordPress: практическое руководство
12.04.2026
Как использовать вложенное меню в WordPress с помощью пакета WP Premium
02.12.2025
WooCommerce: как программно изменить титул страницы после оформления заказа
16.07.2026
×
Прокачай свой WordPress!

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

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