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

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

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

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

Если вы замечаете, что:

  • Пользователи жалуются, что в корзине остаются товары, которые они давно добавили и забыли;
  • Накопление товаров в корзинах влияет на производительность;
  • Вы хотите повысить конверсию, мотивируя пользователей быстрее оформлять заказ;

тогда задача удаления товаров из корзины по времени — для вас.

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

1. Отслеживаем время добавления товара в корзину

WooCommerce не хранит напрямую время добавления товара в корзину. Для этого нам нужно сохранить timestamp при добавлении товара в сессию.

add_action('woocommerce_add_to_cart', 'wpfix_track_cart_item_time', 10, 6); function wpfix_track_cart_item_time($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {     $cart = WC()->cart->get_cart();     if (isset($cart[$cart_item_key])) {         $cart[$cart_item_key]['added_time'] = time();         WC()->cart->cart_contents[$cart_item_key]['added_time'] = time();     } }

2. Создаем функцию для удаления устаревших товаров из корзины

Будем проверять товары в корзине и удалять те, которые лежат дольше заданного времени (например, 30 минут).

function wpfix_remove_expired_cart_items() {     if (!WC()->cart) return;      $cart = WC()->cart->get_cart();     $now = time();     $expiration_seconds = 30 * 60; // 30 минут      $removed = false;      foreach ($cart as $cart_item_key => $cart_item) {         if (isset($cart_item['added_time']) && ($now - $cart_item['added_time']) > $expiration_seconds) {             WC()->cart->remove_cart_item($cart_item_key);             $removed = true;         }     }      if ($removed) {         WC()->cart->calculate_totals();     } }

3. Запускаем проверку при загрузке страниц сайта

Чтобы удаление срабатывало регулярно, добавим запуск проверки при инициализации WooCommerce.

add_action('woocommerce_before_cart', 'wpfix_remove_expired_cart_items'); add_action('woocommerce_before_checkout_form', 'wpfix_remove_expired_cart_items'); add_action('init', function() {     if (is_admin()) return;     wpfix_remove_expired_cart_items(); });

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

  • Добавьте товар в корзину и проверьте, что в массиве WC()->cart->get_cart() для этого товара появляется поле added_time с текущим временем.
  • Подождите более 30 минут (или измените $expiration_seconds на пару минут для теста), затем обновите страницу корзины — устаревший товар должен исчезнуть.
  • Проверьте, что при удалении товара обновляются итоги корзины.

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

  • added_time не добавляется к товарам: убедитесь, что хук woocommerce_add_to_cart правильно подключен, и что корзина инициализирована.
  • Удаление не происходит: проверьте, что функция удаления запускается при загрузке страниц, где доступна корзина (cart, checkout).
  • Нарушение работы сессии или кеширования: если сайт использует кеширование страниц или плагинов, убедитесь, что корзина не кешируется, иначе изменения не будут видны сразу.
  • Время не обновляется при изменении количества товара: если пользователь изменяет количество, время не сбрасывается. Можно доработать обработчик для обновления added_time при изменении количества.

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

  • Не запускайте функцию удаления на каждой странице без нужды, ограничьте хук страницами корзины и оформления заказа.
  • Для сайтов с большой нагрузкой рассмотрите реализацию очистки корзин через WP-Cron, а не на каждой загрузке.
  • Используйте защиту от кеширования страниц с корзиной (например, через заголовки Cache-Control: no-cache). Это важно для корректной работы корзины.
  • Для расширения функционала можно интегрировать уведомления пользователей о том, что товары в корзине скоро будут удалены.

Сравнение подходов: код vs плагины

Метод Преимущества Недостатки
Решение через код (как описано выше) Легко кастомизируется, нет лишних функций, минимальная нагрузка Требует навыков разработки, нужно тестировать при обновлениях WooCommerce
Плагины (например, WooCommerce Cart Expiration) Готовое решение, настройка через интерфейс, поддержка разработчиков Может содержать лишний функционал, потенциально увеличивает нагрузку, зависимости от обновлений
WooCommerce: установка ограничений на количество товаров в корзине
28.06.2026
WooCommerce: автоматическое удаление товаров из корзины по времени нахождения
04.06.2026
Как использовать WPCommunity для создания внутреннего портала на WordPress
07.02.2026
Как успешно использовать WPRemark для улучшения комментариев в WordPress
16.12.2025
Автоматическая оптимизация изображений в WordPress при загрузке
03.01.2026