如何通过连接到 Wordpress 的 class 添加 remove_action?
How to remove_action that's been added via a class that's hooked into Wordpress?
我正在尝试删除 Woocommerce 订阅通过以下方式声明的 Wordpress 操作:
class WC_Subscriptions_Synchroniser {
public static function init() {
add_action( 'woocommerce_single_product_summary', __CLASS__ . '::products_first_payment_date', 31 );
}
add_action( 'init', 'WC_Subscriptions_Synchroniser::init' );
}
Codex 有几个关于在 class 中声明的删除操作的示例:
https://codex.wordpress.org/Function_Reference/remove_action
我已经按照以下方式改编和组合但没有成功:
$my_class = new WC_Subscriptions_Synchroniser;
function remove_my_class_action(){
global $my_class;
remove_action( 'woocommerce_single_product_summary', array( $my_class, 'products_first_payment_date' ), 40 );
remove_action( 'woocommerce_single_product_summary', array( 'WC_Subscriptions_Synchroniser', 'products_first_payment_date' ), 40 );
}
add_action( 'woocommerce_single_product_summary', 'remove_my_class_action', 40 );
我也尝试过将 remove_my_class_action
操作与 init
挂钩,但这也不起作用。
请帮忙!
两件事...首先,products_first_payment_date()
方法是静态的,因此您不需要实例化 class 对象来删除它。其次,一个函数在运行之前需要被删除。因此,我认为您的 add_action()
更早的优先级应该可以解决问题。
function remove_my_class_action(){
remove_action( 'woocommerce_single_product_summary', array( 'WC_Subscriptions_Synchroniser', 'products_first_payment_date' ), 40 );
}
add_action( 'woocommerce_single_product_summary', 'remove_my_class_action', 10 );
我正在尝试删除 Woocommerce 订阅通过以下方式声明的 Wordpress 操作:
class WC_Subscriptions_Synchroniser {
public static function init() {
add_action( 'woocommerce_single_product_summary', __CLASS__ . '::products_first_payment_date', 31 );
}
add_action( 'init', 'WC_Subscriptions_Synchroniser::init' );
}
Codex 有几个关于在 class 中声明的删除操作的示例: https://codex.wordpress.org/Function_Reference/remove_action
我已经按照以下方式改编和组合但没有成功:
$my_class = new WC_Subscriptions_Synchroniser;
function remove_my_class_action(){
global $my_class;
remove_action( 'woocommerce_single_product_summary', array( $my_class, 'products_first_payment_date' ), 40 );
remove_action( 'woocommerce_single_product_summary', array( 'WC_Subscriptions_Synchroniser', 'products_first_payment_date' ), 40 );
}
add_action( 'woocommerce_single_product_summary', 'remove_my_class_action', 40 );
我也尝试过将 remove_my_class_action
操作与 init
挂钩,但这也不起作用。
请帮忙!
两件事...首先,products_first_payment_date()
方法是静态的,因此您不需要实例化 class 对象来删除它。其次,一个函数在运行之前需要被删除。因此,我认为您的 add_action()
更早的优先级应该可以解决问题。
function remove_my_class_action(){
remove_action( 'woocommerce_single_product_summary', array( 'WC_Subscriptions_Synchroniser', 'products_first_payment_date' ), 40 );
}
add_action( 'woocommerce_single_product_summary', 'remove_my_class_action', 10 );