如何删除类中另一个插件添加的筛选器

时间:2019-04-15 作者:Josh

好吧,我在这里很挣扎——我觉得这应该是直截了当的,但我就是无法让它发挥作用。

我需要删除Woocommerce订阅添加的筛选器。该筛选器是在WC Subscriptions Switcher类中找到的WC\\U Subscriptions\\U Switcher类的一部分。php和添加如下

class WC_Subscriptions_Switcher {

    /**
     * Bootstraps the class and hooks required actions & filters.
     *
     * @since 1.4
     */
    public static function init() {
         ...

         // Display/indicate whether a cart switch item is a upgrade/downgrade/crossgrade
         add_filter( \'woocommerce_cart_item_subtotal\', __CLASS__ . \'::add_cart_item_switch_direction\', 10, 3 );
         ...
该函数将文本添加到购物车(升级)、(降级)或(横向),我不想/不需要在我的案例中显示这些文本。

我试着简单地从Wordpress Codex中使用下面的删除过滤器功能,但是不管怎样,仍会显示有问题的文本。

 global $WC_Subscriptions_Switcher;
   remove_filter( \'woocommerce_cart_item_subtotal\', array($WC_Subscriptions_Switcher, \'add_cart_item_switch_direction\') );
我也尝试了(我认为)我在下面的答案中找到的所有东西,也只是从remove_action or remove_filter with external classes?

如何删除此过滤器,使其在第一时间不被触发?我知道我可以使用gettext覆盖文本,但我认为一开始不运行它会更干净(即使使用gettext,过滤器添加的html标记也会保留下来)。

感谢您的帮助。

2 个回复
最合适的回答,由SO网友:nmr 整理而成

您没有编写过滤器删除代码的放置位置,但我怀疑您试图在添加之前将其删除。另一个重要的一点是,您没有给出priority 中的参数remove_filter().

引用自documentation:

remove\\u filter($tag,$function\\u to\\u remove,$priority)

Important: 要删除挂钩,添加挂钩时,$function\\u To\\u remove和$priority参数必须匹配。这适用于过滤器和操作。移除失败时不会发出警告。

当插件已经加载时,尝试删除过滤器,并输入两个必需的参数——函数名和优先级。

add_action( \'plugins_loaded\', \'se334421_remove_plugin_filter\' );
function se334421_remove_plugin_filter() {
    remove_filter( \'woocommerce_cart_item_subtotal\', \'WC_Subscriptions_Switcher::add_cart_item_switch_direction\', 10 );
}

SO网友:BlueSuiter

按如下方式设置行动调用的优先级:

remove_filter(\'woocommerce_cart_item_subtotal\', array($WC_Subscriptions_Switcher, \'add_cart_item_switch_direction\') , 99);
可以在两者之间使用数字0-99 用于设置优先级。