【问题标题】:Unable to hook into custom filter hook using add_filter()无法使用 add_filter() 挂钩到自定义过滤器挂钩
【发布时间】:2019-08-28 17:40:15
【问题描述】:

我对 Wordpress 开发非常陌生,所以这个问题可能很愚蠢。可能是我不了解 Wordpress 中自定义过滤器的概念。到目前为止,我已经使用 Wordpress 自己的过滤器挂钩来更改如下值:

add_filter('the_content', 'ffl_add_footer') ; // add footer to the blog content

我刚刚开始学习您可以编写代码的自定义过滤器。所以我的理解是你使用 apply_filters() 来设置一个过滤器挂钩到一个值($var below),如下所示:

apply_filters('filter_tag' , $var ) ;

稍后您连接到该过滤器并使用回调函数来修改值($var),如下所示:

add_filter('filter_tag , 'callback');

您的回调如下所示:

function callback($var) {
//modify $var 
return $var
}

所以我用下面的代码测试了这种理解:

function callback($var){
    return ($var.'append');
}


$var = 'testing';
echo $var;
$var1 = apply_filters('custom_filter', $var);
add_filter('custom_filter' , 'callback');
echo $var1;

这与我期待 testingtestingappend 时的 testingtesting 相呼应。当我在回调中尝试 exit() 时,似乎根本没有调用回调函数。我是理解错了还是我的代码有问题?

【问题讨论】:

  • 在上一个代码示例中,您在实际注册之前应用了过滤器。尝试更改apply_filteradd_filter 的顺序以获得预期的结果。

标签: wordpress


【解决方案1】:

问题是你在调用add_filter apply_filters 被执行之后。您需要提前调用它,以便首先注册您的回调,然后apply_filters 将执行它

例如(未经测试,但应该可以):

function callback($var){
    return ($var.'append');
}
add_filter('custom_filter' , 'callback'); // register the callback

$var = 'testing';
echo $var; // testing

$var1 = apply_filters('custom_filter', $var); // apply registered callbacks
echo $var1; // testingappend

【讨论】:

  • 感谢您的回答。我认为它以另一种方式工作。但是,现在我有一个相关的问题。当您尝试挂钩现有插件的过滤器(例如名为 B 的插件)时会发生什么。如何确保我的插件的 add_filter() 先执行,然后 Bs apply_filter() 执行。插件似乎按字母顺序运行。这是否意味着我的插件需要命名为 A ?
  • add_filter() 函数最多接受 4 个参数,第三个是 优先级。这是 WordPress 用来确定每个注册回调的执行顺序的方法。值越低,回调执行得越早(有关更多详细信息,请查看文档。)哦,如果它有助于@Knownow,请考虑将此答案标记为accepted
猜你喜欢
  • 2021-12-07
  • 2021-01-20
  • 1970-01-01
  • 2020-04-07
  • 2017-04-18
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多