You need to enable JavaScript to run this app. WooCommerce自定义price.php模板的小数分隔符及价格展示问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce自定义price.php模板的小数分隔符及价格展示问题咨询

WooCommerce 自定义价格展示的最优实现方案

你遇到的两个格式问题本质是直接调用了原始价格方法,绕开了WooCommerce自带的价格渲染流程,完全不需要硬修改price.php模板逻辑,通过内置的价格输出钩子就能实现自定义的两行布局,同时100%对齐原生的价格格式、促销划线逻辑。

问题根因定位

  • 你之前直接调用$product->get_regular_price()、$product->get_sale_price()拿到的是数据库存储的原始纯数值(固定用点作为小数分隔符),没有经过WooCommerce的价格格式化流程,所以和原生get_price_html()的输出格式不统一。
  • 手动判断促销状态并加划线的逻辑,和WooCommerce原生的促销校验规则(定时促销有效期、会员折扣、优惠券自动抵扣等)不一致,所以会出现划线样式缺失的问题。

具体实现步骤

1. 复用原生价格格式化能力,统一小数分隔符规则

WooCommerce内置的wc_price()函数会自动读取后台的货币配置:包括小数位数、千位分隔符、小数分隔符(支持设置逗号/点)、货币符号位置、含税价计算逻辑,所有价格输出通过这个函数渲染,就能完全和原生get_price_html()的格式对齐,不会出现分隔符不统一的问题。

  • 替换原来直接输出原始价格的写法:把echo $product->get_regular_price()改成echo wc_price( $product->get_regular_price() )即可自动匹配后台设置。

2. 通过内置价格钩子实现自定义两行布局,自动保留促销划线逻辑

WooCommerce提供了woocommerce_price_html过滤器,专门用来修改get_price_html()的最终输出内容,你可以在这个钩子里拿到原生已经渲染完成的价格结构(已经处理好促销状态、原价划线、格式对齐的内容),只需要重新排版为两行布局即可,完全不需要自己重写促销判断逻辑。
将以下代码添加到主题的functions.php文件中即可实现需求:

add_filter( 'woocommerce_price_html', 'custom_two_line_price_layout', 10, 2 );
function custom_two_line_price_layout( $original_price_html, $product ) {
    // 仅在产品详情页的价格展示场景生效,不影响购物车、结算页等其他场景的价格输出
    if ( ! is_product() ) {
        return $original_price_html;
    }

    // 第一行:带VAT标注的价格行
    // 优先复用原生已经渲染好的原价展示(带促销划线时自动保留<del>标签)
    if ( $product->is_on_sale() ) {
        // 提取原生HTML中已经渲染好的带划线的原价部分,完全对齐原有样式
        preg_match( '/<del.*<\/del>/', $original_price_html, $del_matches );
        $regular_price_part = $del_matches[0] ?? wc_price( $product->get_regular_price() );
    } else {
        $regular_price_part = wc_price( $product->get_regular_price() );
    }
    $first_line = sprintf(
        '<div class="price-row price-regular">%s <small>VAT included</small></div>',
        $regular_price_part
    );

    // 第二行:带每公斤单价标注的价格行
    // 这里可以根据你的产品重量属性计算对应每KG的价格,同样通过wc_price格式化保证格式统一
    $kg_price_value = // 替换为你的每KG价格计算逻辑,比如根据产品重量字段计算
    $second_line = sprintf(
        '<div class="price-row price-per-kg">%s <small>Price per KG</small></div>',
        wc_price( $kg_price_value )
    );

    // 拼接最终的两行布局输出,替换原生的价格结构
    return sprintf(
        '<div class="custom-price-block">%s%s</div>',
        $first_line,
        $second_line
    );
}

方案优势

  • 所有价格格式完全和原生输出统一,自动适配后台配置的小数分隔符规则,不会出现点/逗号混用的问题。
  • 促销展示逻辑完全复用WooCommerce原生能力,不管是定时促销、会员专属价、插件扩展的折扣逻辑,都会自动给原价加上<del>划线标签,和站点其他位置的促销样式完全一致。
  • 不需要硬修改price.php核心模板文件,后续WooCommerce版本升级不会出现模板覆盖的兼容问题,也不会和其他价格类插件产生逻辑冲突。

注意:实现过程中不要直接在代码里硬编码判断促销状态、硬写划线标签的逻辑,这类手动判断会遗漏WooCommerce核心的价格计算规则,比如含税价转换、多币种适配、价格后缀显示等功能。

内容的提问来源于stack exchange,提问作者Sallar Rabiei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 23:36:04