WooCommerce归档页面促销商品价格前置文本异常问题排查
WooCommerce促销价文本错误问题修复
错误原因分析
- 钩子使用逻辑错误:
woocommerce_archive_description是归档页面全局描述区域的钩子,仅执行一次,判断的是页面加载时第一个商品的状态。如果第一个商品是促销品,过滤器会被全局添加,导致后续所有非促销商品也显示促销文本;如果第一个商品非促销,所有促销商品也无法触发文本显示。 - 过滤器未按需管控:一旦通过
add_filter添加价格修改逻辑,会在整个请求周期内持续生效,无法针对单个商品动态开关。 - 函数嵌套定义风险:在
wps_custom_message内部定义cw_change_product_price_display,多次触发钩子时会触发“无法重新声明函数”的致命错误。
修正后的代码
function cw_change_product_price_display( $price, $product = null ) { // 兼容购物车项场景,获取对应商品对象 if ( is_null( $product ) && isset( $_product ) ) { $product = $_product; } // 仅对促销状态的商品添加文本 if ( is_a( $product, 'WC_Product' ) && $product->is_on_sale() ) { $text = __( '<span>Your sale price is:</span><br>', 'text-domain' ); return $text . ' ' . $price; } // 非促销商品直接返回原价格 return $price; } // 监听商品页面/归档页的价格渲染 add_filter( 'woocommerce_get_price_html', 'cw_change_product_price_display', 10, 2 ); // 监听购物车中的价格渲染 add_filter( 'woocommerce_cart_item_price', 'cw_change_product_price_display', 10, 2 );
修正要点说明
- 直接在价格过滤器内部判断商品促销状态,每个商品渲染价格时都会单独校验,确保仅促销商品显示指定文本。
- 适配
woocommerce_get_price_html的参数传递(默认传递价格和商品对象),准确获取当前待渲染的商品。 - 移除错误的全局钩子,改用价格过滤器本身实现逻辑,避免全局生效的问题。
- 解除函数嵌套定义,杜绝重复声明错误。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

