When looking through WordPress snippets/tutorials/plugins I often see add_action()
and add_filter()
being placed before the function is declared:
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;
}
From a logic standpoint this just doesn’t make sense to me. Why would you place the function after it is called in your code? This is usually how I would handle the same situation:
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;
}
add_action( 'publish_post', 'email_friends' );
I know both scenarios work, but is there a specific advantage to one or the other? About 90% of the time I see the first scenario being used, so that leads me to believe there is a benefit to this in some way.
It is easier to read: When is what called? If you are debugging a hook you can immediately see if you have to read the function or not: If it is not your hook, you can skip the code.
In my themes and plugins I combine all registrations for actions, filters and shortcodes at the top and I add the hook to the PHPDoc block:
add_action( 'wp_head', 'foo' );
add_action( 'shutdown', 'bar' );
/**
* Foo you!
*
* @wp-hook wp_head
* @return void
*/
function foo()
{
print '<!-- foo -->';
}