WooCommerce - 使用 4 位小数价格时在下订单前四舍五入总价
WooCommerce - Rounding total prices before placing order when using 4 decimals prices
所以我目前正在做一个批量销售谷物和香料的网站。
1 件产品的单位是 1 克。我为一种产品设置了最低订购量,比方说 100 件(100 克)。但是 1 克的价格可能非常低(有时 0.0045 美元,所以 1 克甚至不到半美分)。
我还设置了下订单的最低金额,购物车的总金额必须至少为 15 美元。
有时购物车的总金额会保留 4 位小数,例如 $20.5517。我希望购物车中显示的小计价和总价四舍五入到小数点后两位。但我需要将商品价格保留在小数点后 4 位,因为这是我保持价格竞争力的唯一方法。¦
基本上我需要后端保留 4 位小数的价格并在产品上也显示 4 位小数(这就是它已经设置的方式)但我希望在客户可以通过以下方式付款之前将总数四舍五入贝宝。
有人可以帮我吗?
谢谢
这是一个解决方案。但是您必须自己对 woocommerce 相关模板进行所有必要的更改。
所以,如果您不知道如何正确自定义 WooCommerce 模板,请首先阅读:
Template Structure + Overriding Templates via a Theme
然后现在使用下面的自定义函数来完成显示格式 html 价格的工作(将价格从 4 位小数更改为 2 位小数并保留 html 标签),您将能够对 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 文件或任何插件文件。
此代码已经过测试并且有效
用法示例:
在 woocommerce 模板 cart/cart_totals.php
的第 33
行你有这个原始代码:
(小计显示价格)
<td data-title="<?php esc_attr_e( 'Subtotal', 'woocommerce' ); ?>"><?php wc_cart_totals_subtotal_html(); ?></td>
如果您搜索 wc_cart_totals_subtotal_html()
function you will see that is using this WC_Cart
method: 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
子文件夹中…
该是你工作的时候了!
所以我目前正在做一个批量销售谷物和香料的网站。
1 件产品的单位是 1 克。我为一种产品设置了最低订购量,比方说 100 件(100 克)。但是 1 克的价格可能非常低(有时 0.0045 美元,所以 1 克甚至不到半美分)。
我还设置了下订单的最低金额,购物车的总金额必须至少为 15 美元。
有时购物车的总金额会保留 4 位小数,例如 $20.5517。我希望购物车中显示的小计价和总价四舍五入到小数点后两位。但我需要将商品价格保留在小数点后 4 位,因为这是我保持价格竞争力的唯一方法。¦
基本上我需要后端保留 4 位小数的价格并在产品上也显示 4 位小数(这就是它已经设置的方式)但我希望在客户可以通过以下方式付款之前将总数四舍五入贝宝。
有人可以帮我吗?
谢谢
这是一个解决方案。但是您必须自己对 woocommerce 相关模板进行所有必要的更改。
所以,如果您不知道如何正确自定义 WooCommerce 模板,请首先阅读:
Template Structure + Overriding Templates via a Theme
然后现在使用下面的自定义函数来完成显示格式 html 价格的工作(将价格从 4 位小数更改为 2 位小数并保留 html 标签),您将能够对 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 文件或任何插件文件。
此代码已经过测试并且有效
用法示例:
在 woocommerce 模板 cart/cart_totals.php
的第 33
行你有这个原始代码:
(小计显示价格)
<td data-title="<?php esc_attr_e( 'Subtotal', 'woocommerce' ); ?>"><?php wc_cart_totals_subtotal_html(); ?></td>
如果您搜索 wc_cart_totals_subtotal_html()
function you will see that is using this WC_Cart
method: 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
子文件夹中…
该是你工作的时候了!