add_action(), add_filter() before or after function

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.

4

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 -->';
}

Leave a Comment