问题描述
在 Woocommerce 设置中,我设置了 6 位小数,以便获得更准确的税收计算。但是,我需要在前端、电子邮件等中仅显示 2 位小数的所有价格和金额。我发现了两个功能
add_filter('wc_price_args','custom_decimals_price_args',10,1);
function custom_decimals_price_args($args) {
$args['decimals'] = 2;
return $args;
}
add_filter( 'wc_get_price_decimals','change_prices_decimals',20,1 );
function change_prices_decimals( $decimals ){
$decimals = 2;
return $decimals;
}
这些和我应该使用哪个有什么区别?
解决方法
请注意,WC_Woocommerce
define_constants() method 中的 WC_ROUNDING_PRECISION
常量设置为 6
。
这意味着 WooCommerce Tax 计算精度已经设置为 6 位小数。
税收计算精度基于wc_get_rounding_precision()
core function中使用的WC_Tax
Class:
function wc_get_rounding_precision() {
$precision = wc_get_price_decimals() + 2;
if ( absint( WC_ROUNDING_PRECISION ) > $precision ) {
$precision = absint( WC_ROUNDING_PRECISION );
}
return $precision;
}
如您所见,如果显示的价格十进制值 + 2 小于 WC_ROUNDING_PRECISION
常量,则优先考虑 WC_ROUNDING_PRECISION
常量。但是,由于您希望显示价格保留两位小数,这需要其他一些东西。
因此,您不应增加显示的价格小数位数,也不应使用 wc_price_args
或/和 wc_get_price_decimals
挂钩来提高税收计算的精度。
如果6位小数的精度不够而您想获得更高的精度:
如何更精确地计算税收?
获得更精确的税收计算并保持显示的价格保留 2 位小数的最佳方法是编辑 WordPress wp_config.php 文件并添加以下行 (您可以在其中增加 WC_ROUNDING_PRECISION
常量值例如,这里的值设置为 8):
// Change WooCommerce rounding precision
define('WC_ROUNDING_PRECISION',8);
这将改变 WC_ROUNDING_PRECISION
常数而不影响显示的价格小数。
wc_price_args
用于向价格添加额外参数 - 它接受原始价格,并且可以向其中添加其他内容,例如货币符号。当 get_price
被调用时,它会在前端包含这个货币符号。
https://wp-kama.com/plugin/woocommerce/hook/wc_price_args
wc_get_price_decimals
它在“点”之后设置一些小数 - 例如。如果您将其设置为 5,则价格将看起来像 0.00000
https://wp-kama.com/plugin/woocommerce/function/wc_get_price_decimals
我没有测试这个,但它应该可以完成工作。
add_filter('wc_price_args','custom_decimals_price_args',10,1);
function custom_decimals_price_args($price,$args) {
return number_format((float)$price,2,'.','');
}
或者,您可以编辑产品所在的模板,并使用上面的 get_price
格式化 number_format
。
如果这对您有用,请告诉我。