You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce设置折扣价时同步显示原价支持CSS划线方案

问题原因

你原有代码的问题在于同时挂载了woocommerce_product_get_price(售价)和woocommerce_product_get_regular_price(原价)两个过滤器,直接把原价的返回值也乘以了0.85,相当于把系统读取到的原价也改成了折扣后的值,前端自然无法获取真实原价做并列展示。

正确实现代码

先删除你之前添加的自定义折扣代码,将以下代码放入当前主题/子主题的functions.php文件中即可:

// 给全站简单商品应用15%折扣,仅修改售价,不改动原价存储值
add_filter('woocommerce_product_get_price', 'apply_sitewide_15_percent_off', 90, 2 );
function apply_sitewide_15_percent_off( $price, $product ) {
    // 后台管理页不生效,避免后台编辑价格时显示错乱
    if ( $product->is_type('simple') && !is_admin() ) {
        $price *= 0.85;
    }
    return $price;
}

// 前端输出价格时,拼接带指定class的原价标签
add_filter( 'woocommerce_get_price_html', 'render_regular_price_with_custom_wrapper', 99, 2 );
function render_regular_price_with_custom_wrapper( $price_html, $product ) {
    // 仅针对简单商品、且折扣价低于原价时输出原价,避免无折扣时重复显示价格
    if ( $product->is_type('simple') && $product->get_regular_price() > $product->get_price() && !is_admin() ) {
        // 调用WooCommerce原生价格格式化函数,自动匹配站点货币、小数位设置
        $formatted_regular_price = wc_price( $product->get_regular_price() );
        // 按要求拼接原价标签,放在折扣价相邻位置
        $price_html = sprintf( '<span class="regular-price">%s</span> %s', $formatted_regular_price, $price_html );
    }
    return $price_html;
}
配套CSS样式(实现原价删除线效果)

把以下代码加到主题的「自定义CSS」选项中即可实现你要的划线原价效果:

.regular-price {
    text-decoration: line-through;
    color: #888;
    margin-right: 10px;
    opacity: 0.7;
}
注意事项
  • 代码仅对简单商品生效,如果你需要覆盖可变商品、其他自定义商品类型,可以修改$product->is_type('simple')的判断条件
  • 后台商品编辑、订单计算逻辑不会受影响,折扣逻辑仅在前端生效
  • 原价输出使用WooCommerce原生价格格式化方法,不会出现货币符号、小数位和站点设置不一致的问题
  • 增加了价格差判断,当商品没有折扣(折扣价等于原价)时,不会重复显示两个相同价格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:48:17