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
相关产品推荐
相关产品推荐

