Во многих магазинах в корзине для клиента отображается полная стоимость всех товаров в корзине без учета скидок и рядом указывается скидка, т.е. сумма, которую человек экономит при покупке, ну и в конце естественно итоговая стоимость к оплате. Примерно это должно выглядеть так:
| Подытог | 1000 руб. |
| Скидка | - 250 руб. |
| Итого | 750 руб. |
В WooCommerce это реализовано очень топорно. В графу "подытог" выводится сумма уже за минусом скидок по акции, а сумма скидки даже не показывается, т.е. человек не может видеть реальную стоимость товаров и оценить экономию при покупке, что конечно же очень плохо. Клиент видит такую картину:
| Подытог | 750 руб. |
| Итого | 750 руб. |
Как получить значения скидок и нормальный подытог
Ниже я привожу функцию, которая поможет вам получить 3 значения:
- общая стоимость товаров по обычной цене (до вычета скидок и купонов)
- скидка на товары по акции
- общая скидка (акции + купоны)
На выходе получаем массив со значениями, которые потом можно использовать в своём шаблоне.
function wpgid_get_cart_subtotal_and_discount() {
global $woocommerce;
$discount_total = 0;
// Перебираем товары по акции и суммируем скидку
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values) {
$_product = $values['data'];
if ( $_product->is_on_sale() && !empty($_product->get_sale_price()) && is_numeric($_product->get_sale_price() ) ) {
$regular_price = $_product->get_regular_price();
$sale_price = $_product->get_sale_price();
$discount = ($regular_price - $sale_price) * $values['quantity'];
$discount_total += $discount;
}
}
// Записываем значения в переменные в зависимости от того есть скидки или их нету
if ( $discount_total > 0 || $woocommerce->cart->discount_cart > 0 ) {
$discount = $discount_total + $woocommerce->cart->discount_cart;
$discount_sale = $discount_total;
$subtotal = $discount_total + $woocommerce->cart->get_subtotal();
} else {
$discount = '';
$discount_sale = '';
$subtotal = $woocommerce->cart->get_subtotal();
}
// Собираем значения в массив
$array = [
'subtotal' => $subtotal,
'discount_all' => $discount,
'discount_sale' => $discount_sale,
];
return $array;
}
Отличная идея! Обыскал весь инет не нашел решения.
Использовал Ваш код - к сожалению он не работает. Не выводит результаты. Можете приложить результаты скриншотом?
Я привел лишь функцию, которая на выходе дает вам три значения описанные выше. Я выводил немного топорно на своем сайте, без использования фильтров, напрямую в шаблон, но это не очень правильно, лучше делать всё через фильтры. Если не ошибаюсь за вывод подытога отвечает следующий фильтр: