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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:35:13