除了迷你卡、购物车和收银台Wooccommerce,其他地方都加上3位小数



我遇到了一个问题,我想在网站上的任何地方显示小数点后3位,除了购物车、结账和迷你卡。为此,我已将此代码添加到functions.php文件中。

add_filter( 'wc_get_price_decimals' , 'custom_price_decimals', 20, 1 );
function custom_price_decimals( $decimals ) {
if( is_checkout() || is_page( 'cart' ) || is_cart() ) {
$decimals = 2;
} else{
$decimals = 3;
}
return $decimals;
}

它显示购物车和结账的结果,小数点后2位,网站的其余部分显示小数点后3位。这里的问题是,由于mini-cart.php不在单独的页面上,它将用3位小数显示价格,而不是2位小数。有人能建议我一个变通办法吗?因为我没有看到。干杯

当您查看WC模板的cart/mini-cart.php时,您会发现以下行:

apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );

因此,如果你想确保应用该过滤器的微型零件中只有2位小数,你可以添加一个自定义过滤器,并应用你的逻辑只保留2位小数。例如,使用wc价格格式化函数wc_price:

add_filter(
hook_name: 'woocommerce_cart_item_price',
accepted_args: 3,
callback: function (string $price, array $item, string $key): string {
return wc_price(
price: $item['data']->get_price(),
args: [ 'decimals' => 2 ],
);
},
);
  • 注意,我没有测试这个片段
  • 还要注意,命名函数参数至少需要PHP 8

低于PHP 8:

add_filter(
'woocommerce_cart_item_price',
function (string $price, array $item, string $key): string {
return wc_price(
$item['data']->get_price(),
[ 'decimals' => 2 ],
);
},
10,
3,
);

相关内容

最新更新