如何舍入 Woocommerce 购物车项目(产品)小计并根据项目小计计算购物车小计和总计?

问题描述 投票:0回答:1

我一直在对购物车项目小计级别的舍入进行广泛的研究,但我一直无法找到解决方案。

我想做的是在应用折扣后对产品小计进行四舍五入。然后通过将所有产品小计相加来计算购物车总计和总计。

我尝试过不同的钩子,例如:

  1. woocommerce_before_calculate_totals - 这个钩子只允许我修改产品价格。
  2. woocommerce_cart_product_subtotal(过滤器) - 该钩子仅影响购物车项目小计的显示;它不会改变购物车小计和总计的计算。
  3. woocommerce_calculate_totals - 这个钩子只允许我根据产品价格和数量修改计算,它与购物车项目小计没有直接关系。

如果您有任何建议或解决方案,我将非常感谢您的帮助。谢谢!

woocommerce rounding hook-woocommerce
1个回答
0
投票

经过一番尝试,我想出了这个:

add_action('woocommerce_before_calculate_totals', 'my_woocommerce_calculate_totals', 10, 1);

function my_woocommerce_calculate_totals($cart) {
if (is_admin() && !defined('DOING_AJAX')) {
    return;
}

// Loop over $cart items
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
    // Get line specific data
    $itemQuantity = $cart_item['quantity'];
    $productObject = $cart_item['data']; // Get the product object
    $productPrice = $productObject->get_price();
    $regular_price = $productObject ->get_regular_price();
    
    // Calculate new price per item
    $discount = ($regular_price - $productPrice) / $regular_price;
    $new_price = (round($productPrice * $itemQuantity) / $itemQuantity) / (1 - $discount);

    // Set new price
    $productObject->set_price($new_price);
}
}

理论是计算项目小计并将其四舍五入到最接近的整数。然后根据四舍五入的项目小计重新计算新价格。我做了一些测试,这个函数显示了正确的四舍五入小计和总计。但产品价格将会有所调整。

对此解决方案有什么评论吗?会造成什么问题吗?提前非常感谢您。

© www.soinside.com 2019 - 2024. All rights reserved.