都 8102 年了,从 WORDPRESS 入手了解程序结构会很迟吗?在线等挺急的。
下面先说说我的理解
通过以下一下方式加入了一个 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 写,可能有点恶心,见谅!
1
falcon05 2018-03-23 01:44:36 +08:00 via iPhone
那就是预留给人二次开发或者以后用的,话说我觉得并不是每个钩子都需要填上的,但是需要的时候没有那个钩子就不方便。
|
2
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) } } |
3
kumakiti 2018-03-23 08:17:13 +08:00 via iPhone 2
这个就好像点外卖,比如我要点一碗面,外卖软件在你下单前给你很多选项,要不要葱,要不要蒜,要不要辣椒要不要香菜什么的,你一个个的调好,下单后老板开始煮面,面煮好了,要放调料,就拿出你选的选项,对照着给,要葱,不要蒜,香菜没写,那就给,辣椒也没写,默认不给。
用户下单做选项时就是 add_filter 老板煮好了面对着选项给调料就是 apply_filter |