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

|

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

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

Автоматическое удаление просмотренных товаров из корзины помогает поддерживать актуальность заказа и улучшает UX. Но WooCommerce по умолчанию не умеет различать просмотренные товары и не предоставляет встроенных средств для их удаления из корзины.

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

Шаг 1. Отслеживание просмотренных товаров

WooCommerce хранит историю просмотров товаров в cookie woocommerce_recently_viewed. Она содержит ID последних просмотренных товаров. Чтобы использовать эту информацию, нужно получить массив ID просмотренных товаров.

function get_viewed_products_ids() {
    if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) ) {
        return [];
    }
    $viewed_products = explode( '|', sanitize_text_field( wp_unslash( $_COOKIE['woocommerce_recently_viewed'] ) ) );
    $viewed_products = array_filter( array_map( 'absint', $viewed_products ) );
    return $viewed_products;
}

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

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

function wc_remove_viewed_products_from_cart() {
    if ( ! is_user_logged_in() ) {
        return; // Ограничимся залогиненными пользователями для стабильности
    }
    $viewed_ids = get_viewed_products_ids();
    if ( empty( $viewed_ids ) ) {
        return;
    }
    $cart = WC()->cart;
    if ( ! $cart ) {
        return;
    }

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product_id = $cart_item['product_id'];
        if ( in_array( $product_id, $viewed_ids, true ) ) {
            $cart->remove_cart_item( $cart_item_key );
        }
    }
}

Шаг 3. Запуск функции в нужный момент

Оптимальное время — перед загрузкой корзины или при инициализации WooCommerce. Подключим функцию к хуку woocommerce_before_cart:

add_action( 'woocommerce_before_cart', 'wc_remove_viewed_products_from_cart' );

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

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

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

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

Метод Описание Плюсы Минусы
Код на хуке woocommerce_before_cart Самописная функция, удаляющая товары из корзины по списку просмотренных Полный контроль, без плагинов, легкая доработка Требует навыков PHP, не работает с кэшем и гостями без доработок
Плагин с аналогичной функцией Использование готовых решений для очистки корзины Простота установки, поддержка Может быть избыточным, нагрузка, ограниченная кастомизация
Использование JS + AJAX Удаление товаров по просмотрам на стороне клиента Гибкость, мгновенная реакция Зависимость от браузера, сложнее отладка
Оптимизация базы данных WordPress: удаляем избыточные данные для ускорения сайта
18.11.2025
Как создать динамические таблицы в WordPress с помощью шорткодов
26.02.2026
Как удалить лишние мета-поля в WordPress без плагинов: новое решение
23.01.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
05.12.2025
Как использовать OmniVideo для автоматического видео-контента в WordPress
19.03.2026
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙