插件可以通过哪些不同的方式向WordPress站点添加过滤器?

时间:2020-07-27 作者:mrputter

我有一个正在应用的筛选器,但找不到对应的调用add_filter(). 有没有其他方法可以添加它?

具体来说:我正在尝试维护/更改Wordpress插件(私人开发,无法联系原始开发人员),对于我当前的更改,我已经跟踪了调用的执行路径:

$output = apply_filters(\'<plugin_name>-output-block\', $output, $my_args);
然而,我一生都无法找到过滤器的定义。我已经浏览了插件的整个代码库;<plugin_name>-output-block"E;什么都没有。我还搜索了“的每个实例”;add_filter"E;如果在变量中使用筛选器名称调用它。。。还是什么都没有。据我所知,从未添加过过滤器。

(我知道您可以使用的功能apply_filters() 简单地定义一个新的动态挂钩,但我不认为这就是这里正在发生的事情(或者至少不是唯一的事情);如果我注释掉那一行,输出肯定会中断。。。因此,后面有一个正在调用的现有功能。)

那么:是否有其他方法可以添加过滤器?除add_filter()? 是否可以将其添加到其他名称下,然后在某处重命名?我错过了什么?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我已经浏览了插件的整个代码库;<plugin_name>-output-block"E;什么都没有。

(修改后的答案)实际上,您可以停用所有其他插件和/或切换到默认(未修改)主题,如二十主题,以查看问题是由另一个插件还是活动主题引起的。但即便如此,我希望以下内容能有所帮助。

是否有其他方法可以添加过滤器?除add_filter()?

基本上,这是为某个过滤器钩子注册回调的唯一正确方法。

但是,也可以通过调用add_action() 而不是add_filter() (add_action() 只是一个包装add_filter()), 因此,如果需要,请尝试在活动主题和插件中搜索它。例如,使用正则表达式(RegEx),尝试搜索add_(filter|action).+output\\-block 在主题/插件文件(PHP文件)中。

虽然不太可能,但您也可以尝试在主题中搜索$wp_filter (其中指向$GLOBALS[\'wp_filter\']) 如果直接访问它以注册筛选器回调。。。

快速(&A);无需手动搜索主题/插件文件的简单(但棘手)方法:使用Query Monitor (QM)do_action()

(嗯,您仍然需要搜索,但这会更容易。)

我与QM没有任何关联,无论是插件还是它的作者,但QM可以帮助您找到与<plugin_name>-output-block

在插件中,暂时使用do_action() 而不是apply_filters():

$output = do_action(\'<plugin_name>-output-block\', $output, $my_args);       // use this
//$output = apply_filters(\'<plugin_name>-output-block\', $output, $my_args); // not this
但既然你说了<如果我注释掉那一行,输出肯定会中断;,然后您可能需要取消对上面第二行的注释。但是,这样做意味着所有的钩子回调都将被调用至少两次,所以请先尝试注释掉第二行。

然后点击挂钩(&M);行动;项目,然后选择;“块”;从左侧下拉菜单中勾选:

enter image description here

相关推荐

使用Add_Filters()、Apply_Filter()、Add_action()和do_action()扩展插件

假设我正在开发一个与预订相关的插件。下次我想在那个插件上添加一个附加组件来支付。然后,我为贝宝支付添加了另一个附加组件。假设下面是html中的支付网关UI界面<div class=\"payments-options\"> <div class=\"bank-payment\"></div> <div class=\"cash-on-delivery\"></div> <!--- Here i