我试图替换一个函数的消息,该函数被woocommerce类的构造函数所钩住。
这是我试图删除的消息:
我所尝试的。
function remove_actions() {
remove_action( \'product_cat_pre_add_form\', array( \'WC_Admin_Taxonomies\', \'product_cat_description\' ));
}
add_action( \'plugins_loaded\', \'remove_actions\' );
我还尝试了使用数组中的第一个元素(“WC\\u Admin\\u Taxonomies”),而不是第一个元素
new WC_Admin_Taxonomies
. 它返回true,但不会删除它,因为实例化会添加动作,所以会删除当前添加的动作。
woocommerce/includes/admin/class wc admin分类法。php-利息部分
class WC_Admin_Taxonomies {
public function __construct() {
add_action( \'product_cat_pre_add_form\', array( $this, \'product_cat_description\' ) );
}
function product_cat_description() {
echo wpautop( __( \'Old message\', \'woocommerce\' ) );
}
}
new WC_Admin_Taxonomies();
这个(\\u new->below)工作正常,添加了新消息,但上面第一个块(remove\\u action)中的代码并没有删除它,所以我最终得到了2条消息。
class WC_Admin_Taxonomies_new {
public function __construct() {
add_action( \'product_cat_pre_add_form\', array( $this, \'product_cat_description_new\' ) );
}
function product_cat_description_new() {
echo wpautop( __( \'New Message\', \'woocommerce\' ) );
}
}
new WC_Admin_Taxonomies_new();
根据科夫谢宁的回答,我试着:
function instantiate_globals() {
$GLOBALS[\'inst\'] = new WC_Admin_Taxonomies;
}
add_action( \'plugins_loaded\', \'instantiate_globals\');
function remove_actions() {
remove_action( \'product_cat_pre_add_form\', array( $GLOBALS[\'inst\'], \'product_cat_description\' )); // var_dump() - outputs true but still not removing it, I believe that filter is the issue.
}
add_action( \'plugins_loaded\', \'remove_actions\');
SO网友:kovshenin
类方法的问题是,除非它们是静态的,否则它们属于一个对象。在您的情况下,您的目标是:
new WC_Admin_Taxonomies_new();
这意味着PHP将创建对象并将其保存在内存中。但不幸的是,由于您没有将此对象指定给变量,因此无法在以后的代码中引用它。
在我脑海中,我可以想出两种方法来解决这个问题:
第一个:全局、单例,可以用来保留对对象的引用以供以后使用:
$GLOBALS[\'foo\'] = new My_Class();
// ...
remove_action( \'action\', array( $GLOBALS[\'foo\'], \'method\' ) );
第二:静态方法。
class My_Class() {
public static function init() {
add_action( \'action\', array( __CLASS__, \'method\' ) );
}
public static function method() {
// ...
}
}
My_Class::init();
// ...
remove_action( \'action\', array( \'My_Class\', \'method\' ) );
希望这有帮助!