REMOVE_ACTION:初始尝试失败,而后来的尝试有效

时间:2014-11-26 作者:Ian Mackenzie

我希望这是张贴这篇文章的正确位置-如果不是,请简单地指示我到正确的位置!

我最近遇到了一个插件,它在标题中添加了一个元条目。我需要删除此操作。add\\u操作条目如下所示:

add_action( \'wp_head\', array( &$this, \'addMetaData\' ) );
“this”与名为Vc\\u Base的类相关。

我最初的反应是在我的函数中添加以下内容。php:

function removeAddMetaData() {
    $vc = new Vc_Base();
    remove_action(\'wp_head\', array(&$vc, \'addMetaData\'),10000);
}
add_action(\'init\', \'removeAddMetaData\', 10000);
这不起作用。我还尝试将10000更改为其他值。

最终奏效的是:

function removeAddMetaData() {
    remove_action(\'wp_head\', array(visual_composer(), \'addMetaData\'));
}
add_action(\'init\', \'removeAddMetaData\');
我找到了visual\\u composer(),它只有一行:

return vc_manager()->vc();
我找到了vc\\U manager()->vc(),其中包括以下几行内容:

$vc = new Vc_Base();
$this->factory[\'vc\'] = $vc;
return $this->factory[\'vc\'];
那么,如果这只是我所做的(以一种迂回的方式),为什么我最初的想法没有奏效?我非常感谢您的反馈,因为如果我能理解的话,我会更加理解WordPress/PHP!

提前谢谢。

1 个回复
SO网友:Milo

您的第一个方法不起作用,因为您创建了该类的新实例,并试图从该新实例中删除该操作。您创建的新实例与添加该操作的实例不同,因此它不起作用。

在第二个示例中,您得到了插件创建的原始实例,因此从该实例中删除操作成功。

看看this question 对于其他一些方式,类可以在插件中实例化自己。

结束