如何通过一个连接到Wordpress的类添加remove_action?

时间:2017-04-13 17:59:22

标签: wordpress woocommerce woocommerce-subscriptions

我试图通过以下方式删除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有一些示例用于删除已在类中声明的操作: 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行动,但这也不起作用。

请帮忙!

1 个答案:

答案 0 :(得分:2)

两件事......首先,products_first_payment_date()方法是静态的,因此您不需要实例化类对象以便将其删除。其次,在运行之前需要删除一个函数。因此,我认为您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 );