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

|

Диагностика проблемы с неактивными корзинами и заказами

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

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

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

SELECT COUNT(*) FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP();

Он покажет число просроченных сессий (корзин), которые можно удалять.

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

1. Удаление просроченных сессий корзины

WooCommerce хранит данные корзины в таблице wp_woocommerce_sessions с полем session_expiry. Чтобы удалить все истекшие сессии, можно использовать следующий код, который запускается по крону или вручную:

function wc_delete_expired_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $time = time();
    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $time
    ));
    return $deleted;
}

Этот код удалит все корзины, срок действия которых истек.

2. Удаление неактивных заказов по статусу и дате

Заказы с неподтвержденным статусом (например, pending или failed) старше определенного времени можно удалить так:

function wc_delete_old_unpaid_orders( $days = 30 ) {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed', 'wc-on-hold'),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => "$days days ago",
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );
    $orders = get_posts( $args );
    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true );
    }
    return count($orders);
}

Вызывайте эту функцию с нужным количеством дней. Например, wc_delete_old_unpaid_orders(30); удалит все неподтвержденные заказы старше 30 дней.

3. Автоматизация через WP-Cron

Чтобы не запускать вручную, добавьте задачу в WP-Cron:

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

add_action( 'wc_cleanup_cron_hook', function() {
    wc_delete_expired_sessions();
    wc_delete_old_unpaid_orders(30);
});

Это будет ежедневно удалять просроченные корзины и заказы старше 30 дней.

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

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

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

function wc_delete_old_unpaid_orders_batch( $days = 30, $batch_size = 50 ) {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed', 'wc-on-hold'),
        'date_query'     => array(
            array('column' => 'post_date', 'before' => "$days days ago"),
        ),
        'fields'         => 'ids',
        'posts_per_page' => $batch_size,
    );
    $orders = get_posts( $args );
    if ( empty( $orders ) ) {
        return 0;
    }
    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true );
    }
    return count($orders);
}

Сравнение вариантов удаления неактивных корзин и заказов

МетодПлюсыМинусыКомпромисс
Плагины очисткиПросто использовать, готовый функционалДополнительная нагрузка, возможные конфликтыИспользовать проверенные плагины, но мониторить нагрузку
Код на PHP с WP-CronКонтроль, гибкость, меньше нагрузкиТребуется настройка, знания PHPАвтоматизировать с логированием и ограничениями по времени
Ручной SQL-запросМаксимальная скоростьРиск ошибок, требует резервного копированияИспользовать для аварийной очистки с осторожностью
Как защитить WordPress от bruteforce-атак с помощью плагинов и кода
24.12.2025
Как создать главный вывод текстовой информации в WordPress без плагинов
22.01.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
15.05.2026
Как добавить AJAX в формы WordPress без плагинов
15.12.2025
WooCommerce: как программно удалять неактивные корзины и заказы
31.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее