我正在切换到我自己写的一个新的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' ) );
有人可以帮忙吗?
答案 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 ); ?>