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

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

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

Как определить, что корзина пустая: диагностируем с помощью кода

Для взаимодействия с корзиной WooCommerce используется глобальный объект WC()->cart. Чтобы проверить, пуста ли корзина, используйте метод is_empty():

if ( WC()->cart->is_empty() ) {
    // Корзина пуста
}

Этот метод возвращает true, если в корзине нет товаров.

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

Задача звучит несколько необычно, ведь если корзина пустая, в ней уже нет товаров. Чаще нужно автоматически очистить корзину при определенных условиях или синхронизировать сессии. Но если под «удалением товаров» понимается удаление товаров из базы или метаданных, то можно реализовать обработчик события очистки корзины. WooCommerce не имеет прямого хука на очистку корзины, но мы можем использовать хук woocommerce_cart_emptied, который срабатывает после очистки корзины.

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

add_action('woocommerce_cart_emptied', 'custom_action_after_cart_emptied');
function custom_action_after_cart_emptied() {
    // Ваш код для удаления данных или действий после очистки корзины
    error_log('Корзина была очищена');
    // Например, удалить пользовательские метаданные
    $user_id = get_current_user_id();
    if ($user_id) {
        delete_user_meta($user_id, '_custom_cart_data');
    }
}

Автоматическая очистка корзины по таймеру

Если задача — автоматически очищать корзину через определенное время без действия пользователя, это можно сделать через WP-Cron и проверку состояния корзины:

add_action('wp', 'schedule_cart_cleanup');
function schedule_cart_cleanup() {
    if (!wp_next_scheduled('auto_empty_cart_event')) {
        wp_schedule_event(time(), 'hourly', 'auto_empty_cart_event');
    }
}

add_action('auto_empty_cart_event', 'auto_empty_cart_function');
function auto_empty_cart_function() {
    if ( is_user_logged_in() && WC()->cart ) {
        if (!WC()->cart->is_empty()) {
            // Очистить корзину
            WC()->cart->empty_cart();
        }
    }
}

Этот пример очищает корзину каждого часа, если в ней есть товары. Можно доработать логику, чтобы очищать корзину только если товары находятся там более определенного времени (например, сессия пользователя). Для этого нужно хранить метаданные с отметкой времени добавления товаров в корзину.

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

  • Добавьте товары в корзину и очистите корзину вручную — в логах (error_log) должна появиться запись о очистке корзины.
  • Проверьте, что корзина действительно очищается автоматически по cron (запустите cron вручную или подождите час).
  • Убедитесь, что после очистки корзины пользовательские метаданные, связанные с корзиной, удаляются.

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

  • WC()->cart не инициализирован — вызов методов корзины вне хука wp или позднее может приводить к ошибкам. Всегда запускайте код после инициализации WooCommerce, например, в wp или init с приоритетом 20.
  • WP-Cron не срабатывает — локальные тесты могут не запускать cron. Для тестирования используйте плагин WP Crontrol или запускайте cron вручную через CLI.
  • Очистка корзины не происходит — убедитесь, что используете WC()->cart->empty_cart(), а не удаляете товары напрямую из сессии.

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

  • Не очищайте корзину пользователей без их ведома, особенно если они не авторизованы — это ухудшит UX.
  • Для хранения информации о времени добавления товаров в корзину используйте транзиенты или метаданные пользователя с префиксом, чтобы избежать конфликтов.
  • Оптимизируйте cron-задачи, чтобы они не запускались слишком часто и не нагружали сервер.

Сравнение методов очистки корзины

МетодОписаниеПлюсыМинусы
Ручная очистка пользователемПользователь сам удаляет товары в корзинеПростой, прозрачныйНет автоматизации
Хук woocommerce_cart_emptiedОбработка после очистки корзиныМожно выполнять дополнительные действияНе инициирует очистку, только реагирует
Автоматическая очистка через WP-CronРегулярное удаление товаров по расписаниюПолная автоматизацияЗависит от работы cron, может ухудшить UX
Автоматическое удаление старых записей в WordPress через шорткод
11.04.2026
Как отключить XML-RPC в WordPress без помощи плагинов
03.01.2026
Как создать автоматический кеш для REST API в WordPress
11.01.2026
Как добавить автоматическое оптимизирование изображений в WordPress
18.11.2025
Оптимизация загрузки шрифтов в WordPress для ускорения сайта
20.02.2026