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

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

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

Для диагностики откройте таблицу wp_woocommerce_sessions в базе данных и выполните запрос:

SELECT COUNT(*) AS total_carts, MAX(session_expiry) FROM wp_woocommerce_sessions;

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

Почему стандартный WooCommerce не очищает корзины?

WooCommerce хранит сессии корзин в таблице wp_woocommerce_sessions и удаляет их по истечении срока действия сессии (по умолчанию 48 часов). Однако на практике многие сессии остаются из-за:

  • Пользователь не закрывал браузер или не завершил сессию.
  • Отсутствие механизма периодической очистки устаревших сессий.
  • Кэширование, мешающее правильному определению сессии.

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

1. Создаем WP-Cron задачу для регулярной очистки

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

if ( ! wp_next_scheduled( 'premiumwp_clear_inactive_wc_carts' ) ) {
    wp_schedule_event( time(), 'twicedaily', 'premiumwp_clear_inactive_wc_carts' );
}

add_action( 'premiumwp_clear_inactive_wc_carts', 'premiumwp_delete_expired_wc_sessions' );

function premiumwp_delete_expired_wc_sessions() {
    global $wpdb;
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $now = time();

    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $table WHERE session_expiry < %d",
        $now
    ) );

    if ( false === $deleted ) {
        error_log('Ошибка при удалении устаревших сессий WooCommerce');
    }
}

2. Проверяем корректность удаления сессий

После запуска задачи проверяйте таблицу wp_woocommerce_sessions в базе данных. Количество записей должно уменьшаться примерно через сутки после добавления кода.

Для ручного запуска функции используйте WP-CLI или временно вызовите функцию в админке (например, через admin_init):

add_action('admin_init', function() {
    if ( current_user_can('manage_options') && isset($_GET['run_wc_cleanup']) ) {
        premiumwp_delete_expired_wc_sessions();
        echo 'Очистка сессий выполнена';
        exit;
    }
});

Перейдите в админку по адресу https://site.ru/wp-admin/?run_wc_cleanup=1 для проверки.

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

  • Через 1-2 дня после внедрения и регулярного запуска Cron проверьте таблицу wp_woocommerce_sessions - она должна содержать только активные сессии.
  • Сравните размер таблицы и время отклика запросов сессий до и после очистки.
  • Просмотрите логи ошибок сервера на предмет ошибок удаления.

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

  • Крон-задача не срабатывает. Проверьте, включен ли WP-Cron и заходят ли на сайт пользователи. Если нет, настройте системный cron на вызов wp-cron.php.
  • Ошибка SQL при удалении. Убедитесь, что таблица wp_woocommerce_sessions существует и префикс таблиц совпадает с $wpdb->prefix.
  • Сессии не удаляются, хотя данные устарели. Проверьте правильность расчета времени в поле session_expiry - должно храниться время в формате UNIX timestamp.
  • Конфликты с плагинами кэширования. Убедитесь, что плагины кэширования не мешают работе сессий WooCommerce.

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

  • Всегда делайте резервную копию базы перед внесением изменений в таблицы.
  • Не увеличивайте слишком часто частоту запуска очистки, чтобы не нагружать базу.
  • Для больших магазинов с сотнями тысяч сессий рассмотрите использование WP CLI команд для пакетного удаления, чтобы избежать таймаутов.
  • Проверяйте логи ошибок сервера для выявления SQL-ошибок и фиксируйте их своевременно.
  • Если используете плагин Clearfy Pro от WPShop, он может помочь в оптимизации базы и автоматическом удалении устаревших данных — рассмотрите его как альтернативу ручному коду.

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

МетодПлюсыМинусыРекомендации
Код с WP-CronПолный контроль, без сторонних плагиновНужно следить за работой WP-CronИспользовать для магазинов среднего размера
Плагин Clearfy ProАвтоматизация, комплексная оптимизацияПлатный, добавляет нагрузкуДля крупных магазинов с частой оптимизацией
WP CLI скриптыЭффективно для больших баз, без нагрузки на сайтТребует доступа к серверу и знаний CLIДля профессиональных администраторов и хостингов
Как создать динамические каталоги в WordPress с поддержкой AJAX и фильтров
08.04.2026
Автоматизация сбора и публикации отзывов в WordPress с Expert Review
25.02.2026
Создать конструктор форм в WordPress с помощью PremiumWP
06.11.2025
Как удалить неиспользуемые шорткоды в WordPress: практические решения и примеры кода
16.04.2026
Создание уникального типа записи с уникальным цветом в WordPress
04.02.2026