如何通过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
相关产品推荐
相关产品推荐

