如何修改WooCommerce订阅模块的价格显示文本?
解决WooCommerce Subscriptions价格显示简化问题
我之前帮客户处理过完全一样的WooCommerce订阅价格显示需求,刚好能给你几个可行的方案,先说说你提到的「部分插件无法修改其余文本」的推测原因:
- WooCommerce Subscriptions的完整价格字符串是通过专属过滤器钩子生成的,比如
woocommerce_subscriptions_product_price_string,很多第三方插件只针对价格数值的单个钩子做修改,没有覆盖到这个完整价格文本的过滤逻辑,所以没法移除多余的描述性文字。
最靠谱的解决方案:自定义钩子函数
直接通过代码拦截插件生成的价格字符串,替换成你需要的「$20」样式。你可以选择以下两种方式添加代码:
方法1:子主题functions.php文件
打开你当前主题的子主题文件夹,找到functions.php,在文件末尾添加以下代码:
add_filter('woocommerce_subscriptions_product_price_string', 'custom_simplify_subscription_price', 10, 3); function custom_simplify_subscription_price($price_string, $product, $args) { // 获取订阅产品的注册费金额 $signup_fee = $product->get_sign_up_fee(); // 用WooCommerce内置函数格式化价格为你需要的样式 return wc_price($signup_fee); }
方法2:使用Code Snippets插件(更安全)
如果你不想修改主题文件,安装并激活「Code Snippets」插件,新建一个代码片段,粘贴上面的代码并启用即可。
备用方案:针对产品价格HTML的钩子
如果上面的钩子没生效(可能是插件版本差异),可以试试这个针对产品价格HTML的过滤钩子:
add_filter('woocommerce_get_price_html', 'custom_subscription_price_html_display', 10, 2); function custom_subscription_price_html_display($price, $product) { // 只对订阅类型产品生效,避免影响普通产品 if (!function_exists('wcs_is_subscription') || !wcs_is_subscription($product)) { return $price; } $signup_fee = $product->get_sign_up_fee(); return wc_price($signup_fee); }
注意事项
- 这两段代码都会自动识别你的WooCommerce货币设置,所以如果你的货币不是美元,也会正确显示对应符号。
- 如果你后续调整了注册费金额,价格显示会自动同步,不用手动修改代码。
内容的提问来源于stack exchange,提问作者joost
相关产品推荐
相关产品推荐

