簡體   English   中英

WooCommerce四舍五入后計算總計

[英]WooCommerce rounding before calculate totals

我使用的是WooCommerce 3.0+版本,以及按用戶角色提供的價格插件,該插件提供了針對價格的%折扣。

我們商店里有一件東西是£89.55。 加上30%的折扣,則變成£62.685。 如果您訂購6,則價值為376.11英鎊。

最終數字是正確的。

但是,由於我將WC設置設置為2dp,因此商品價格顯示為62.69英鎊。 因此,發票不正確,顯示為£62.69 x 6 =£376.11。

我已經考慮過從這里使用woocommerce_before_calculate_totals:

動態購物車項目定價不適用於WooCommerce 3.0+中的訂單

我的代碼是:

add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart_obj ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) )
    return;

 foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
     $new_price = round($cart_item['data']->price,2,PHP_ROUND_HALF_UP);
     $cart_item['data']->set_price($new_price);
     #echo $new_price;
 }

}

回聲$ new_price的輸出為62.69。 但是似乎set_price無法正常工作,因為購物車中的值仍顯示為62.685。

因此,例如,如果我執行62.69 x 2,則小計為125.37。

知道為什么set_price不起作用嗎? 我看見了這個:

Woocommerce:$ cart_item ['data']-> set_price在自定義插件中不起作用

但是那里的答案也不起作用。

任何幫助,不勝感激。

首先,您需要使用WC_Product方法get_price()因為$cart_item['data']WC_Simple_Product的實例。

另外,您還必須提防,因為購物車中的顯示價格已經通過WooCommerce特定格式功能進行了四舍五入。

因此,您的WC 3.0+的功能代碼將是:

add_action( 'woocommerce_before_calculate_totals', 'adding_custom_price', 10, 1);
function adding_custom_price( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    foreach ( $cart->get_cart() as $cart_item ) {
        $product_price = $cart_item['data']->get_price(); // get the price
        $rounded_price = round( $product_price, 2, PHP_ROUND_HALF_UP );
        $cart_item['data']->set_price(floatval($rounded_price));
    }
}

代碼在您的活動子主題(或主題)的function.php文件中,或者在任何插件文件中。


您可以通過在產品價格(購物車產品)中添加一個很少的浮點數來進行檢查(測試)。 您將看到購物車價格確實已更新,例如替換了以下功能:

$cart_item['data']->set_price( floatval( $rounded_price ) );

通過

$cart_item['data']->set_price( floatval( $rounded_price + 0.2 ) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM