Removing a Filter

时间:2017-11-10 作者:Richard

我使用“Simply Show Hooks”插件在页面上发现各种过滤器。

我正在尝试删除以下筛选器的函数(方法):UM_User_posts–>add_tab

这是我的remove_filter 迄今为止的代码:

remove_filter( \'um_profile_tabs\', \'_____\', 100);
我将如何确切地包括该函数(方法)?

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

当您看到一个钩子回调描述为UM_User_posts–>add_tab, 你知道一定有UM_User_posts 某处的物体。如果add_tab() 如果已静态调用,则回调描述将为UM_User_posts::add_tab.

现在,您需要访问UM_User_posts 插件正在使用的类。如何访问该实例?这通常是不可能的,所以您必须使用an ugly workaround.

然而,在你的情况下,有一个更好的方法。我在你的问题中遗漏了一个非常重要的信息:你想删除其回调的插件是什么?我猜你正在使用插件Ultimate Members.。)

现在,当我看到part where the instance for UM_User_posts is created, 我注意到两件事:

我已经没有什么礼貌的词语来描述代码了。可能是我的错。:)但老实说,我不会在生产中运行该代码。

实例被分配给未声明的成员user_posts 班级的UM_API, 类的实例放入一个名为$ultimatemember. 因此,删除回调所需的实例位于$GLOBALS[\'ultimatemember\']->user_posts.

这就引导我们找到了解决方案:

add_action( \'plugins_loaded\', function() {
    remove_filter( 
        \'um_profile_tabs\', 
        [ $GLOBALS[\'ultimatemember\']->user_posts, \'add_tab\' ], 
        100
    );
});
我还没有测试它,因为我真的不想在任何地方安装它,所以…祝你好运。:)

SO网友:Pat J

您需要知道通过add_filter() 命令,以及它所挂接的优先级。

因此,在您的示例中,让我们假设add_filter() 问题如下:

add_filter( \'um_profile_tabs\', array( \'UM_User_posts\', \'add_tab\' ), 100 );
然后你的remove_filter() 应为:

remove_filter( \'um_profile_tabs\', array( \'UM_User_posts\', \'add_tab\' ), 100 );
您需要匹配add_filter() 呼叫如果在add_filter(), 然后它将默认为10. (remove_filter() 同样,默认优先级为10.)

参考文献remove_filter()
  • add_filter()
  • 结束

    相关推荐

    Wordpress Admin Tooltip hooks

    我想知道是否有一种方法可以使用Wordpress管理工具提示(灰色和蓝色),当你更新你的Wordpress(3.x)时会显示这些提示。显示新功能。谢谢