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

如何通过functions.php禁用WooCommerce Subscriptions指定类动作

解决WooCommerce Subscriptions禁用循环总计显示的问题

问题原因

你编写的移除动作代码无效,核心问题是移除时机错误:你将移除函数挂载到了woocommerce_cart_totals_after_order_total钩子上,此时原动作已经执行完毕,再移除无法生效。

原动作WC_Subscriptions_Cart::display_recurring_totals是在WC_Subscriptions_Cart::init()中添加的,该方法通常挂载到WordPress的init钩子执行,所以需要在原动作添加完成、但尚未执行的时机去移除它。

解决方案

方案1:调整移除动作的挂载时机

将移除函数挂载到init钩子(优先级设为20,高于默认的10),或者woocommerce_before_cart_totals钩子(购物车总计渲染前触发),确保在原动作执行前完成移除:

function remove_subscriptions_recurring_totals() {
    // 先检查类是否存在,避免插件未激活时报错
    if ( class_exists( 'WC_Subscriptions_Cart' ) ) {
        remove_action( 'woocommerce_cart_totals_after_order_total', array( 'WC_Subscriptions_Cart', 'display_recurring_totals' ) );
    }
}
// 使用init钩子,优先级20确保在原动作添加后执行
add_action( 'init', 'remove_subscriptions_recurring_totals', 20 );

或者用woocommerce_before_cart_totals钩子:

function remove_subscriptions_recurring_totals() {
    if ( class_exists( 'WC_Subscriptions_Cart' ) ) {
        remove_action( 'woocommerce_cart_totals_after_order_total', array( 'WC_Subscriptions_Cart', 'display_recurring_totals' ) );
    }
}
add_action( 'woocommerce_before_cart_totals', 'remove_subscriptions_recurring_totals' );

方案2:利用插件自带过滤器(更简单)

原方法中包含woocommerce_subscriptions_display_recurring_totals过滤器,直接返回false即可禁用循环总计的显示,无需处理动作优先级:

add_filter( 'woocommerce_subscriptions_display_recurring_totals', '__return_false' );

内容的提问来源于stack exchange,提问作者social.reza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:45:46