从外部插件中删除Woocommerce操作

时间:2015-10-08 19:51:23

标签: php wordpress woocommerce

我正在切换到我自己写的一个新的Wordpress插件,它将与Woocommerce购物车顶部的旧插件一起运行。当我运行这两个插件时,我想删除旧插件的动作,该动作调用它的表格显示在我的帐户用户页面中。如果需要的话,我将在之后添加逻辑,但是现在我只需要删除它。

这是在旧插件中调用操作的方式。

class WC_Subscriptions {

 public static function init() {

  // Display Subscriptions on a User's account page
  add_action( 'woocommerce_before_my_account', __CLASS__ . '::get_my_subscriptions_template' );      

 }

}

WC_Subscriptions::init();

到目前为止,在我自己的插件中,我调用了以下内容,但没有一个能够正常工作。

remove_action( 'woocommerce_before_my_account', array('WC_Subscriptions', 'get_my_subscriptions_template' ) );
// no error but still shows the table

和最后一个

remove_action( 'woocommerce_before_my_account', array( WC_Subscriptions::init(), 'get_my_subscriptions_template' ) );   
// Fatal error: Class 'WC_Subscriptions' not found in /var/sites/XXXXX on line 45

我尝试过从1个,9个,10个,11个和99个更改/添加$priority,这也不起作用。

令人沮丧的是,如果旧的插件是使用new实例启动的话,我确信它会起作用,所以我可以这样做

global $my_class;
remove_action( 'woocommerce_before_my_account', array( $my_class, 'get_my_subscriptions_template' ) );

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

这总是会发生,只是解决了。 我需要将remove_action挂钩到另一个稍后调用的动作。

最后我做了这个

class My_new_plugin {

 public function __construct() {
  add_action( 'wp_head', array($this, 'remove_action_woosubscription_table' ) );        
 }

 public function remove_action_woosubscription_table() {
  remove_action( 'woocommerce_before_my_account', array( 'WC_Subscriptions', 'get_my_subscriptions_template' ) );   
 }

}

答案 1 :(得分:0)

您可以设置第三个属性' priority'为999

 <?php remove_action( $tag, $function_to_remove, $priority ); ?>