我遇到了一个问题,我想在网站上的任何地方显示小数点后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,
);