钩子如何以及为什么能够在不引起递归的情况下调用自身?

时间:2014-06-20 作者:Chris Howard

当查看WP-hooks的代码时,我经常看到调用自己的钩子。

例如,image\\u downsize()中的以下代码段:

function image_downsize($id, $size = \'medium\') {

    if ( !wp_attachment_is_image($id) )
       return false;

    if ( $out = apply_filters( \'image_downsize\', false, $id, $size ) ) {
       return $out;
    }
为什么这不会导致递归?

谢谢

1 个回复
SO网友:Milo

这是:

apply_filters( \'image_downsize\', false, $id, $size )
不调用image_downsize 函数,它应用连接到image_downsize 标记,这将是一个不同的函数。

导致递归的唯一方法是,如果您钩住的过滤器依次调用该函数:

add_filter( \'image_downsize\', \'wpd_downsize\', 20, 3 );
function wpd_downsize( $return, $id, $size ){
    // collapse the universe
    return image_downsize( $id, $size );
}

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴