I am running into issues with the Woocommerce cart total only displaying the price of the last item added to the cart. Individual items prices are not adding up to the total price correctly, it only show the price of the last item.
Here is the code I'm using for overriding the price of the products added to the cart:
function action_woocommerce_before_cart_table() {
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $item => $values) {
$price = 0;
if (array_key_exists('addons', $values) && count($values['addons']) > 0) {
foreach ($values['addons'] as $value) {
$price = $price + $value['price'];
}
} else {
$regular_price = get_post_meta($values['product_id'], '_regular_price', true);
$sale_price = get_post_meta($values['product_id'], '_sale_price', true);
$price = $regular_price;
}
$values['data']->set_price($price);
}
}
add_action('woocommerce_before_cart_table', 'action_woocommerce_before_cart_table', 10, 0);
function action_woocommerce_checkout_before_order_review() {
foreach (WC()->cart->get_cart() as $item => $values) {
$price = 0;
$quantity = $values['quantity'];
if (array_key_exists('addons', $values) && count($values['addons']) > 0) {
foreach ($values['addons'] as $value) {
$price = $price + $value['price'];
}
} else {
$regular_price = get_post_meta($values['product_id'], '_regular_price', true);
$sale_price = get_post_meta($values['product_id'], '_sale_price', true);
$price = $regular_price;
}
// $final_price = $quantity * $price;
$values['data']->set_price($price);
}
}
add_action('woocommerce_review_order_before_cart_contents', 'action_woocommerce_checkout_before_order_review', 10, 0);
function woocommerce_calculate_totals($cart) {
$cart_sub_total = 0;
global $woocommerce;
$items = $woocommerce->cart->get_cart();
foreach ($items as $item => $values) {
$price = 0;
$quantity = $values['quantity'];
if (array_key_exists('addons', $values) && count($values['addons']) > 1) {
foreach ($values['addons'] as $value) {
$price = $price + $value['price'];
}
} else {
$regular_price = get_post_meta($values['product_id'], '_regular_price', true);
$sale_price = get_post_meta($values['product_id'], '_sale_price', true);
$price = $regular_price;
}
$final_price = $quantity * $price;
$cart_sub_total = $final_price;
$values['data']->set_price($cart_sub_total);
}
WC()->cart->subtotal = $cart_sub_total;
$cart->sub_total = $cart_sub_total;
$coupons = WC()->cart->get_coupons();
$cupon_price = 0;
if (!empty($coupons)) {
foreach ($coupons as $code => $coupon) {
$cupon_price = $cupon_price + $coupon->get_amount();
}
}
$new_price = $cart_sub_total - $cupon_price;
WC()->cart->total = $new_price;
$cart->total = $new_price;
}
add_action('woocommerce_before_cart_totals', 'woocommerce_calculate_totals', 30);
add_action('woocommerce_after_calculate_totals', 'woocommerce_calculate_totals', 30);
Appreciate any help.