设置Get_Price_html的小数位格式

时间:2021-07-30 作者:Jose

我管理的一家商店目前面临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的,这只会创建更多的工作

3 个回复
SO网友:tiago calado

仅使用两个十进制数字打印数字。

$backend_price = 2.3456;
echo sprintf(\'%.2f\', $backend_price);

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 ;
}

相关推荐