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

如何让Woocommerce自定义订阅价格字符串同步生效于购物车及迷你购物车?

解决Woocommerce订阅文本无法同步到购物车的问题

嘿,我来帮你搞定这个问题!你当前的函数只对产品页面的订阅文本生效,因为woocommerce_subscriptions_product_price_string这个钩子只负责产品详情页、产品列表页的文本渲染,而购物车和迷你购物车用的是完全不同的过滤钩子,所以你的修改没同步过去很正常~

解决方案:复用替换逻辑,挂载到购物车相关钩子

我们可以把核心的文本替换逻辑抽成一个独立函数,然后同时挂载到产品页面和购物车的专属钩子上,这样就能覆盖所有场景了:

// 核心的订阅文本替换逻辑,复用所有场景
function custom_subscription_price_string( $price_string, $product = null ) {
    // 如果没有传入产品对象,尝试从全局变量获取(适配产品页面场景)
    if ( is_null( $product ) ) {
        global $product;
    }
    
    // 指定需要修改的产品ID数组
    $products_to_change = array( 2212 );
    
    // 检查当前产品是否在目标列表中,且产品对象有效
    if ( $product && in_array( $product->get_id(), $products_to_change ) ) {
        // 替换目标文本
        $price_string = str_replace( 'on the 20th day of every 6th month', 'on the 20th November and 20th May', $price_string );
    }
    
    return $price_string;
}

// 挂载到产品页面/列表页的钩子
add_filter( 'woocommerce_subscriptions_product_price_string', 'custom_subscription_price_string', 10, 2 );

// 挂载到购物车页面整体订阅文本的钩子
add_filter( 'woocommerce_subscriptions_cart_price_string', 'custom_subscription_price_string', 10, 2 );

// 挂载到单个购物车项(包括迷你购物车)的钩子
add_filter( 'woocommerce_subscriptions_cart_item_price_string', 'custom_subscription_price_string', 10, 2 );

关键说明

  1. 复用逻辑:把替换逻辑抽成独立函数,避免重复写相同代码,后续修改文本只需要改这一处就行。
  2. 钩子覆盖:
    • woocommerce_subscriptions_cart_price_string:负责购物车页面中订阅总价区域的文本显示。
    • woocommerce_subscriptions_cart_item_price_string:负责单个购物车项(包括迷你购物车的每一项)的订阅文本渲染。
  3. 兼容性优化:用$product->get_id()替代旧的$product->id,这是Woocommerce 3.0+推荐的写法,适配更高版本的插件。

额外提示

如果修改后还是没看到效果,记得清除WordPress缓存、浏览器缓存,因为Woocommerce可能会缓存订阅价格字符串,清缓存后刷新页面就能看到修改后的文本啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:29