Диагностика проблемы с неактивными вариантами в корзине WooCommerce
Проблема с неактивными или недоступными вариантами товаров в корзине WooCommerce возникает, когда пользователь добавляет товар, но впоследствии этот вариант становится недоступным (например, его удалили, отключили или изменили атрибуты). В результате покупатель сталкивается с ошибками при оформлении заказа, либо такие позиции остаются в корзине и мешают завершить покупку.
Для диагностики:
1. Добавьте в корзину вариативный товар с несколькими вариантами.
2. Сделайте один из вариантов неактивным через админку (отключите, удалите или выставьте статус «нет в наличии»).
3. Попробуйте открыть корзину и оформить заказ.
4. Обратите внимание, есть ли ошибки или неактивные товары остаются в корзине.
Пошаговое решение: автоматическое удаление неактивных вариантов из корзины
1. Добавляем фильтр для очистки корзины при загрузке страницы
Для автоматического удаления неактивных вариантов из корзины используйте хук woocommerce_check_cart_items, который срабатывает при проверке содержимого корзины. В этом хук можно добавить функцию, которая проверит статус каждого варианта и удалит неактивные.
2. Код для удаления неактивных вариантов
add_action('woocommerce_check_cart_items', 'remove_inactive_variation_from_cart');
function remove_inactive_variation_from_cart() {
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
$product = $cart_item['data'];
// Проверяем, является ли товар вариацией
if ($product->is_type('variation')) {
// Проверяем статус вариации
if (!$product->is_purchasable() || !$product->is_in_stock()) {
WC()->cart->remove_cart_item($cart_item_key);
}
}
}
}3. Куда добавить код
Этот код можно добавить в файл functions.php активной темы или лучше — в кастомный плагин, чтобы не потерять изменения при обновлении темы.
Проверка результата после внедрения
Чтобы проверить, что решение работает:
1. Добавьте в корзину вариативный товар.
2. В админке сделайте один из вариантов недоступным (например, снимите галочку «В наличии»).
3. Обновите страницу корзины или оформите заказ.
4. Убедитесь, что неактивный вариант автоматически удалился из корзины и не мешает оформлению заказа.
Частые ошибки и как их исправить
- Код не работает, не удаляет товар. Проверьте, что в корзине действительно есть вариации, а не простые товары; функция
is_type('variation')обязательно должна применяться к объектуWC_Product. - Удаляются активные товары. Возможно, проверка
is_purchasable()илиis_in_stock()неправильно использована. Убедитесь, что не меняли логику и не добавили лишние условия. - Ошибка PHP или конфликт с другим плагином. Временно отключите другие плагины и проверьте, нет ли fatal ошибок. Для отладки подключите WP_DEBUG в
wp-config.php.
Практические советы по безопасности и производительности
- Не используйте тяжелые циклы и запросы в хуках, которые вызываются часто. В нашем случае проверка ограничена элементами корзины и не влияет на производительность.
- Регулярно обновляйте WooCommerce и тему, чтобы избежать несовместимостей с API.
- Если корзина содержит много товаров, можно оптимизировать проверку, кешируя результаты или ограничивая вызовы функции.
Альтернативные варианты решения
| Способ | Плюсы | Минусы |
|---|---|---|
| Код в functions.php (как выше) | Быстрое решение, минимальный ресурс | Требует базовых навыков PHP, может быть утерян при смене темы |
| Использование плагинов для очистки корзины | Готовые решения, часто с настройками | Могут замедлять сайт, не всегда точечное удаление неактивных вариантов |
| Кастомные плагины с расширенной логикой | Гибкость, расширяемость | Требует разработки, поддержки |