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

|

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

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

Основные признаки проблемы:

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

1. Очистка заказов с определенным статусом по времени

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

function wpp_delete_old_pending_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => 'wc-pending',
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '7 days ago',
            ),
        ),
        'fields'         => 'ids',
        'posts_per_page' => -1,
    );
    $orders = get_posts($args);
    if (empty($orders)) {
        return;
    }
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true - полный удаление
    }
}

// Регистрируем событие раз в сутки
if (!wp_next_scheduled('wpp_daily_delete_old_pending_orders')) {
    wp_schedule_event(time(), 'daily', 'wpp_daily_delete_old_pending_orders');
}
add_action('wpp_daily_delete_old_pending_orders', 'wpp_delete_old_pending_orders');

2. Удаление неактивных корзин WooCommerce

WooCommerce хранит сессии корзин в базе данных (таблица wp_woocommerce_sessions). Сессии, не обновлявшиеся более 48 часов, можно считать неактивными и удалить.

Добавьте следующий код для удаления таких сессий:

function wpp_delete_expired_woocommerce_sessions() {
    global $wpdb;
    $timeout = 48 * 60 * 60; // 48 часов в секундах
    $expiry_time = time() - $timeout;

    $table = $wpdb->prefix . 'woocommerce_sessions';
    $sessions = $wpdb->get_results($wpdb->prepare(
        "SELECT session_id, session_expiry FROM $table WHERE session_expiry < %d",
        $expiry_time
    ));

    if (!empty($sessions)) {
        foreach ($sessions as $session) {
            $wpdb->delete($table, array('session_id' => $session->session_id));
        }
    }
}

// Запускаем очистку раз в сутки
if (!wp_next_scheduled('wpp_daily_delete_expired_sessions')) {
    wp_schedule_event(time(), 'daily', 'wpp_daily_delete_expired_sessions');
}
add_action('wpp_daily_delete_expired_sessions', 'wpp_delete_expired_woocommerce_sessions');

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

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

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

Сравнение способов очистки корзин и заказов

МетодПреимуществаНедостатки
Удаление заказов через WP Cron и wp_delete_postПолное удаление, учитывает статусы WooCommerce, легко настраиваетсяЗависит от надежности WP Cron, требует знаний PHP
Удаление сессий из базыЧистит неактивные корзины, уменьшает нагрузку на базуНужен доступ к базе, риск удаления активных сессий при ошибках
Плагины оптимизацииУдобство, готовые решения, часто с дополнительным функционаломМогут влиять на производительность, не всегда гибкие
Как добавить поддержку видеоплеера HTML5 в WordPress с примерами и плагинами
05.04.2026
Как использовать внешние API в WordPress с помощью AJAX: практическое руководство
02.04.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
15.05.2026
Как удалить скрипт из заголовка WordPress для ускорения сайта
29.12.2025
WooCommerce: автоматическое удаление неактивных корзин и заказов
18.05.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »