【问题标题】:Remove Woocommerce action from external plugin从外部插件中删除 Woocommerce 操作
【发布时间】:2015-10-09 04:55:01
【问题描述】:

我正在切换到我自己编写的新 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' ) );

谁能帮忙?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    这总是发生,只是解决了。 我需要将 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' ) );   
     }
    
    }
    

    【讨论】:

    • 如您所见,您需要在 WC_Subscriptions 已初始化之后删除操作。
    【解决方案2】:

    您可以将第三个属性“优先级”设置为 999

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

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2014-11-19
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多