Диагностика проблемы отсутствия стоимости для отсутствующих товаров
По умолчанию WooCommerce скрывает стоимость товаров, которых нет в наличии, в корзине. Это вызывает путаницу у покупателей, так как они не видят итоговую сумму с учетом этих товаров. Проблема особенно критична для магазинов с предзаказами, ожиданием поступления или временным отсутствием товара.
Чтобы проверить, сталкивается ли ваш магазин с этой проблемой, добавьте в корзину товар с нулевым запасом и перейдите на страницу корзины. Если стоимость отсутствующего товара отсутствует или отображается некорректно, значит, нужно внедрять решение.
Пошаговое решение: вывод стоимости отсутствующих товаров в корзине WooCommerce
1. Создание фильтра для отображения цены отсутствующих товаров
Добавьте в functions.php вашей темы следующий код, который будет выводить цену товара, даже если его запас равен нулю:
add_filter('woocommerce_cart_item_price', 'show_price_for_out_of_stock_items', 10, 3);
function show_price_for_out_of_stock_items($price_html, $cart_item, $cart_item_key) {
$product = $cart_item['data'];
if (!$product->is_in_stock()) {
$price = wc_price($product->get_price());
return $price;
}
return $price_html;
}2. Убедитесь, что в корзине отображается статус отсутствия товара
Для ясности покупателя стоит добавить пометку, что товар отсутствует, но цена учитывается:
add_filter('woocommerce_cart_item_name', 'add_out_of_stock_notice_in_cart', 10, 3);
function add_out_of_stock_notice_in_cart($product_name, $cart_item, $cart_item_key) {
$product = $cart_item['data'];
if (!$product->is_in_stock()) {
$product_name .= ' – <span style="color:red;">(Отсутствует на складе)</span>';
}
return $product_name;
}Проверка результата после внедрения
1. Добавьте в корзину товар с нулевым или отрицательным запасом.
2. Перейдите на страницу корзины.
3. Убедитесь, что цена товара отображается рядом с наименованием.
4. Проверьте, что рядом с названием товара есть пометка (Отсутствует на складе) красного цвета.
5. Итоговая сумма на странице корзины и оформления заказа должна включать стоимость отсутствующих товаров.
Частые ошибки и как их исправить
- Цена не отображается для отсутствующего товара: Проверьте, что в объекте
$productдействительно вызываетсяget_price(), а неget_regular_price(), так как цена может быть динамической. - Пометка о статусе отсутствия не видна или форматируется некорректно: Убедитесь, что фильтр применяется корректно и нет конфликтов с CSS темы.
- Итоговая сумма корзины не учитывает отсутствующие товары: Проверьте, нет ли плагинов, которые модифицируют расчет стоимости и исключают отсутствующие товары из суммы.
Практические советы по безопасности и производительности
- Добавляйте кастомный код только в дочернюю тему или в отдельный плагин, чтобы при обновлениях не потерять изменения.
- Избегайте сложных запросов в фильтрах, чтобы не замедлять загрузку страницы корзины.
- Проверяйте совместимость с используемыми плагинами управления запасами и предзаказами.
Сравнение подходов к выводу цены отсутствующих товаров
| Метод | Реализация | Плюсы | Минусы |
|---|---|---|---|
Через фильтр woocommerce_cart_item_price | Код в functions.php, простой фильтр | Быстро, не требует плагинов | Нужны знания PHP, возможны конфликты с темой |
| Использование плагина для управления запасами | Сторонние плагины, например WooCommerce Pre-Orders | Дополнительный функционал (предзаказы, уведомления) | Платно, может замедлить сайт |