web-dev-qa-db-ja.com

関数の前後のadd_action()、add_filter()

WordPressのスニペット/チュートリアル/プラグインを見ると、関数が宣言される前にadd_action()add_filter()が配置されているのがよくわかります。

add_action( 'publish_post', 'email_friends' );

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

論理的な観点からは、これは私には意味がありません。コード内で呼び出された後に、なぜ関数を配置するのでしょうか。これは通常私が同じ状況を処理する方法です:

function email_friends( $post_ID )  {
   $friends = '[email protected], [email protected]';
   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' );

両方のシナリオが機能することはわかっていますが、どちらか一方に特定の利点がありますか?私は最初のシナリオが使用されているのを見ている時間の約90%なので、何らかの形でこれには利点があると信じています。

16
voodooGQ

読みやすくなっています: what と呼ばれる場合あなたがフックをデバッグしているならば、あなたは関数を読む必要があるかどうかすぐに見ることができます:それがあなたのフックでないなら、あなたはコードをスキップすることができます。

私のテーマとプラグインでは、アクション、フィルタ、およびショートコードのすべての登録を一番上にまとめています。私は、PHPDocブロックにフックを追加します。

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

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

実際には違いはありません。たとえば、最初のシナリオに従うことをお勧めします。呼び出しを1か所にまとめて、その下の関数を定義するのが適切だからです。 PHPは、何かを実行する前に文書全体を解析します。関数が正しく定義されていれば、すべて正常に機能します。どちらのシナリオでも利点はありません。

私はここで言っている権利は次のように信じています:あなたのボートに浮かぶものは何でも:)

6
OriginalEXE

4年後、しかし、私はそれが人々が検索からここに来るのを助けるだろうと確信しています。

他の人が述べているように、phpは文書全体を解析し正しい順序で実行するので違いはありません。だからあなたが好きなものは何でも。

私は個人的には最初のスタイルが好きです。

add_action(hook, bar);
function bar(){
    //code here
}

私は後ろ向きに考える傾向があります。あなたがそうするなら目標指向。それで、私たちは「関数バーを使ってフックしています。さて、関数は何をしているのでしょうか」と読むのが好きです。

それは機能のためのコンテキストをより良く設定します。もちろんこれは私の個人的な好みです。だからあなたが好きなことをする。

1
John_911