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

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

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

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

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

WooCommerce не хранит время добавления товара в корзину по умолчанию, поэтому добавим мета-данные к каждому элементу корзины при добавлении:

add_filter('woocommerce_add_cart_item_data', 'add_time_to_cart_item', 10, 3);
function add_time_to_cart_item($cart_item_data, $product_id, $variation_id) {
    $cart_item_data['added_time'] = time();
    return $cart_item_data;
}

2. Запускаем проверку и удаление устаревших товаров при загрузке страницы корзины

Используем хук woocommerce_before_cart чтобы проверять товары и удалять те, которые в корзине дольше 24 часов (86400 секунд):

add_action('woocommerce_before_cart', 'remove_old_cart_items');
function remove_old_cart_items() {
    $cart = WC()->cart;
    if ( ! $cart ) return;

    $items_to_remove = [];
    $current_time = time();
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        if ( isset($cart_item['added_time']) && ($current_time - $cart_item['added_time'] > 86400) ) {
            $items_to_remove[] = $cart_item_key;
        }
    }

    foreach ( $items_to_remove as $key ) {
        $cart->remove_cart_item( $key );
    }
}

3. Обновляем сессию и корзину

WooCommerce сам обновляет сессию и корзину после удаления товаров, дополнительных действий не требуется.

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

  • Добавьте товар в корзину и проверьте, что к нему в данных корзины добавился ключ added_time. Через инструменты разработчика или отладчик можно проверить массив корзины.
  • Измените значение времени в added_time (например, вручную в базе или через фильтр) на более старое, чем 24 часа.
  • Откройте страницу корзины — товар должен автоматически удалиться.
  • Убедитесь, что корзина обновилась без ошибок и без необходимости ручного обновления.

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

  • Товары не удаляются: проверьте, что мета added_time действительно добавился при добавлении в корзину. Включите дебаг и логирование с помощью error_log().
  • Удаление происходит слишком рано или слишком поздно: проверьте правильность вычисления времени и используемую константу 86400 (24 часа в секундах).
  • Корзина не обновляется: убедитесь, что функция вызывается на странице корзины, а не на других страницах, и что нет конфликтов с кеширующими плагинами.
  • Конфликты с другими плагинами: протестируйте решение на чистом WooCommerce без сторонних плагинов, чтобы исключить конфликты.

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

  • Не храните лишние данные в сессии корзины, ограничьтесь только ключом added_time для минимизации нагрузки.
  • Для сайтов с большим трафиком и корзинами лучше запускать удаление через WP-Cron или серверный cron, чтобы не замедлять загрузку страницы.
  • Обязательно протестируйте решение в разных браузерах и при включённом кешировании.
  • Если требуется удалять товары по другим условиям (цена, категория, пользовательские поля), используйте аналогичный подход с проверкой и удалением по условию.

Сравнение вариантов реализации автоматического удаления товаров из корзины

МетодПреимуществаНедостаткиПример
Добавление мета added_time и проверка на странице корзиныПростая реализация, не требует дополнительного cronРаботает только при посещении страницы корзиныКод из статьи
WP-Cron задача для удаления просроченных товаровРаботает независимо от посещения сайта, лучше для больших проектовСложнее в настройке, требует cronСоздание cron задачи с вызовом удаления по условию
Использование сторонних плагинов для управления корзинойГотовые решения с графическим интерфейсомМогут быть тяжелыми и избыточнымиПлагины вроде WooCommerce Cart Reports
Как создать простую систему отзывов в WordPress
20.11.2025
Динамические опыты пользователя в WordPress с плагином WPRemark
05.02.2026
Как создать автоматический импорт событий в WordPress через REST API
11.04.2026
Как добавить автоматическое обновление тем и плагинов в WordPress
15.04.2026
Как создать автоматическое удаление старого контента в WordPress
21.01.2026