当浏览WordPress片段/教程/插件时,我经常看到在函数声明前放置add_action()add_filter()

add_action( 'publish_post', 'email_friends' );

function email_friends( $post_ID ) {
   $friends = 'bob@example.org, susie@example.org';
   mail( $friends, "sally's blog updated" , 'I just put something on my blog: http://blog.example.com' );
   return $post_ID;
}


从逻辑的观点来看,这并没有使对我而言为什么在代码中调用该函数后会放置该函数?通常,这是我处理相同情况的方式:大约有90%的时间,我看到使用了第一种方案,因此使我相信,这种方法在某种程度上是有好处的。

#1 楼

更容易阅读:什么时候叫什么?如果您正在调试一个钩子,则可以立即查看是否必须读取该函数:如果不是钩子,则可以跳过代码。顶部的操作,过滤器和简码,然后将钩子添加到PHPDoc块中:

add_action( 'wp_head',  'foo' );
add_action( 'shutdown', 'bar' );

/**
 * Foo you!
 *
 * @wp-hook wp_head
 * @return  void
 */
function foo()
{
    print '<!-- foo -->';
}


评论


尽管我不同意(只是因为我的个人喜好和过去的编码习惯),但对于为什么以这种方式完成它,更容易读懂。

–voodooGQ
2012-09-26 18:19



#2 楼

实际上并没有真正的区别,例如,我更喜欢采用第一种情况,因为将调用放在一个位置并在其下定义函数比较容易。
PHP在运行任何内容之前都会解析整个文档,并且如果正确定义了函数,则一切都会正常运行,在两种情况下都没有好处。 />漂浮在船上的东西:)

评论


它之所以起作用,不是因为PHP会解析整个文档,而是因为在运行do_action时(很可能)在函数定义之后调用了call_user_func_array()。因此,您可以在任何时候定义该钩子函数。

–kovshenin
2015年5月4日在10:39

#3 楼

4年后,但我确信它会帮助人们从搜索中获得帮助。 。因此,无论您喜欢什么。

我个人喜欢第一种样式:

如果您愿意的话,以目标为导向。因此,我想读一读,“我们正在钩子上做功能栏。好吧,现在,功能是做什么的?”

它为功能更好地设置了上下文。当然,这只是我个人的喜好。随便吧。

#4 楼

我觉得WordPress编码标准中应该对此有一些具体的指导,但似乎没有。 />
A)始终遵循WP Codex中提供的示例,并依次执行functionadd_action,如下所示:

function wporg_custom()
{
    // do something
}
add_action('init', 'wporg_custom');

/> B)如果您选择了不同的样式,请选择一种样式并在您构建的所有主题和插件中始终如一地进行-不仅是目前的“随风而逝”。