WORDPRESS 网上看了很多次还是不懂 apply_filters 和 add_filter

2018-03-22 23:36:20 +08:00
 McContax

都 8102 年了,从 WORDPRESS 入手了解程序结构会很迟吗?在线等挺急的。

apply_filters 和 add_filter 究竟是怎么样的一种关系?

下面先说说我的理解

通过以下一下方式加入了一个 filter

function example_callback( $example ) {
    // Maybe modify $example in some way.
    return $example;
}
add_filter( 'example_filter', 'example_callback' );

这种情况下,代码执行到某一步遇到某个触发点,就会有执行函数 example_callback,而 apply_filters 则是主动执行。

apply_filters( 'example_filter', $value );

在页面的某处加入这个函数,则会连到 add_filter( 'example_filter', 'example_callback' );主动执行 example_callback

不知道我的理解有没有错误。

如果上面的理论成立,现在来问另外一个问题。现在我从 wordpress 的 twentyeleven 入手,去了解并尝试写一个简陋主题,在 author.php:56 那里遇到了一个函数

echo get_avatar( get_the_author_meta( 'user_email' ), apply_filters( 'twentyeleven_author_bio_avatar_size', 60 ) );

在这里遇到一个问题,这个 filter 名 twentyeleven_author_bio_avatar_size,应该可以在某处见到一个类似于

add_filter( 'twentyeleven_author_bio_avatar_size', 'the function' );

但是我找翻了主题内的所有文件,硬是没见到类似函数,去 developer.wordpress.org 上面看了一下,发现只有。apply_filters( 'twentyeleven_author_bio_avatar_size', 60 )这个函数的解析,并没有说 twentyeleven_author_bio_avatar_size 这个钩子在哪里设置的。(我去 function.php 看过并没有找到)

第一次完全用 markdown 写,可能有点恶心,见谅!

3688 次点击
所在节点    问与答
5 条回复
falcon05
2018-03-23 01:44:36 +08:00
那就是预留给人二次开发或者以后用的,话说我觉得并不是每个钩子都需要填上的,但是需要的时候没有那个钩子就不方便。
cevincheung
2018-03-23 04:46:19 +08:00
这么理解吧。

funcs = array

func add = ($alias,$func_name) { funcs[$alias] = $func_name }

func apply = ($alias,$param) { if $name=funcs[$alias] { return $name(...$param) } }
kumakiti
2018-03-23 08:17:13 +08:00
这个就好像点外卖,比如我要点一碗面,外卖软件在你下单前给你很多选项,要不要葱,要不要蒜,要不要辣椒要不要香菜什么的,你一个个的调好,下单后老板开始煮面,面煮好了,要放调料,就拿出你选的选项,对照着给,要葱,不要蒜,香菜没写,那就给,辣椒也没写,默认不给。
用户下单做选项时就是 add_filter
老板煮好了面对着选项给调料就是 apply_filter
McContax
2018-03-23 23:26:16 +08:00
@kumakiti 还有就是第二个问题那里,只见到 apply_filters 没见到 add_filter,这个就有点难理解了,不知道是我找的方向不对还是怎么样,反正是没找到对应的 add_filter
kumakiti
2018-03-24 00:34:49 +08:00
@McContax add_filter 是主题开发者自己加的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX