WooCommerce - 在使用4位小数价格

时间:2017-07-19 14:43:29

标签: php wordpress woocommerce cart price

所以我目前正在开发一个批量销售谷物和香料的网站。

1件产品的单位为1克。我为产品设定了100个单位(100克)的最小订单金额。但1克的价格可能非常低(有时为0.0045美元,1克甚至不到5美分)。

我还设定了最低订单,购物车必须至少15美元。

有时购物车的总金额为4位小数,如$ 20.5517。我希望购物车中显示的小计和总价格四舍五入到小数点后2位。但是我需要保持物品价格的4位小数,因为这是我能够保持价格竞争力的唯一方式。

基本上我需要后端保持4位小数价格,并在产品上显示4位小数(这就是它已经设置的方式)但我希望在客户通过paypal支付之前将总数四舍五入。

有人可以帮我吗?

由于

1 个答案:

答案 0 :(得分:1)

这是一个解决方案。但是你必须在woocommerce相关模板中做出所有必要的改变。

首先,如果您不知道如何正确自定义WooCommerce模板,请阅读:
Template Structure + Overriding Templates via a Theme

然后现在使用下面的自定义函数将显示格式化的html价格(将价格从4位小数改为2位小数并保持html标签为arround),您将能够对woocommerce相关模板进行必要的更改:

function wc_shrink_price( $price_html ){
    // Extract the price (without formatting html code)
    $price = floatval(preg_replace('/[^0-9\.,]+/', '', $price_html));

    // Round price with 2 decimals precision
    $shrink_price = round($price, 2); 

    // Replace old existing price in the original html structure and return the result
    return str_replace($price, $shrink_price, $price_html);
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码经过测试并正常运行

使用示例:

cart/cart_totals.php 行的woocommerce模板 33 上,您有以下原始代码:
(小计显示价格)

<td data-title="<?php esc_attr_e( 'Subtotal', 'woocommerce' ); ?>"><?php wc_cart_totals_subtotal_html(); ?></td>

如果您搜索wc_cart_totals_subtotal_html()功能,您会看到使用此 WC_Cart 方法:WC()->cart->get_cart_subtotal() ...
所以你可以这样替换它:

<td data-title="<?php esc_attr_e( 'Subtotal', 'woocommerce' ); ?>">
<?php 
    // Replacement function by a WC_Cart method
    $subtotal_html_price = WC()->cart->get_cart_subtotal();

    // Here we use our custom function to get a formated html price with 2 decimals
    echo wc_shrink_price( $subtotal_html_price );
?>
</td>

所以知道你可以看到你需要为所有购物车价格做类似的事情。
购物车和结帐模板位于 cart checkout 子文件夹中... 这是你的工作时间!