WooCommerce中特定品类商品价格小数位数自定义问题
解决WooCommerce指定品类商品价格小数位数问题
你的代码存在两个核心问题:
has_term()函数的参数顺序错误,正确顺序应为has_term( 分类标识, 分类法, 目标ID )- 仅依赖全局
$product对象会导致部分场景(如购物车、订单页面)失效
修正后的基础版代码
add_filter( 'wc_get_price_decimals', 'custom_gas_price_decimals', 10, 1 ); function custom_gas_price_decimals( $decimals ) { // 优先获取全局产品对象 global $product; // 若全局产品不存在,尝试从当前文章对象获取 if ( ! is_a( $product, 'WC_Product' ) && is_singular( 'product' ) ) { $product = wc_get_product( get_the_ID() ); } if ( is_a( $product, 'WC_Product' ) ) { // 检查产品是否属于'gas'产品分类(分类法为product_cat) if ( has_term( 'gas', 'product_cat', $product->get_id() ) ) { $decimals = 2; } } return $decimals; }
兼容购物车/订单的增强版代码
如果需要在购物车、订单页面也生效,需额外处理价格计算逻辑:
// 前端显示时修改小数位数 add_filter( 'wc_get_price_decimals', 'custom_gas_price_decimals_display', 10, 1 ); function custom_gas_price_decimals_display( $decimals ) { global $product; if ( ! is_a( $product, 'WC_Product' ) && is_singular( 'product' ) ) { $product = wc_get_product( get_the_ID() ); } if ( is_a( $product, 'WC_Product' ) && has_term( 'gas', 'product_cat', $product->get_id() ) ) { $decimals = 2; } return $decimals; } // 购物车/订单计算时修正价格小数位数 add_filter( 'woocommerce_get_price_excluding_tax', 'custom_gas_price_calculation', 10, 3 ); add_filter( 'woocommerce_get_price_including_tax', 'custom_gas_price_calculation', 10, 3 ); function custom_gas_price_calculation( $price, $product, $args ) { if ( has_term( 'gas', 'product_cat', $product->get_id() ) ) { $price = number_format( $price, 2, wc_get_price_decimal_separator(), wc_get_price_thousand_separator() ); $price = (float) $price; } return $price; }
关键说明
product_cat是WooCommerce默认产品分类的分类法,若使用自定义分类法,需替换为对应分类法名称- 代码需添加到主题的
functions.php文件或自定义插件中 - 增强版通过额外钩子确保购物车、订单中的价格计算也遵循2位小数规则
内容的提问来源于stack exchange,提问作者João Pedro
相关产品推荐
相关产品推荐

