我管理的一家商店目前面临bug WooCommerce尚未解决这一问题,因为它引入了无税舍入价格。到目前为止,一个有效的临时修复方法是将整个存储更改为4位小数,以提高准确性。现在的问题是,一些新客户似乎认为我们的价格是以美元以外的其他货币计算的,因为给出的是6位数(19.998)。我想知道是否有一种方法可以使用类似number\\u格式的东西来格式化woocommerce\\u get\\u price\\u html的输出。我有点不知所措,因为它的输出是转义html来设计价格,所以类似这样
add_filter( \'woocommerce_get_price_html\', \'rounded_price_html\', 100, 2 );
function rounded_price_html( $price, $product ){
return number_format( $price, 2, \',\', \'.\');
}
不起作用。因此,基本上我要问的是,有没有任何方法可以在不干扰HTML的情况下格式化此函数的价格?这只会影响前端,因为我们不关心后端的四位数。使用JS创建东西不是一个选项,因为我们的主题是基于AJAX的,这只会创建更多的工作
SO网友:Den Isahac
即使在后端设置小数位数,也可以通过wp_get_price_decimals
过滤器挂钩。
/**
* Return the number of decimals after the decimal point.
*
* @params int $decimals The number of decimals. Defaults to get_option( \'woocommerce_price_num_decimals\', 2 )
* @return int
*/
function wp123_custom_decimals( $decimals ) {
return 2; // The number of decimals.
}
add_filter( \'wc_get_price_decimals\', \'wp123_custom_decimals\', 10, 1 );
SO网友:RayZor
将存储设置为小数点后3位,然后使用:
add_filter( \'formatted_woocommerce_price\', \'ts_woo_decimal_price\', 10, 5 );
function ts_woo_decimal_price( $formatted_price, $price, $decimal_places, $decimal_separator, $thousand_separator ) {
$unit = number_format( intval( $price ), 0, $decimal_separator, $thousand_separator );
$three_dp = $price - intval( $price );
$two_dp = ( number_format($three_dp,2) * 100);
if($two_dp == 100) {
$two_dp = 0;
$unit++;
}
$decimal = sprintf( \'%02d\', ( $two_dp ) );
return $unit . \'.\' . $decimal ;
}