如何通过连接到 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 );