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


18

WordPress snippets / tutorials / pluginsを見る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;
}

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

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

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

回答:


13

読みやすいです:ときにされて何を呼ばれますか?フックをデバッグしている場合は、関数を読み取る必要があるかどうかをすぐに確認できます。フックでない場合は、コードをスキップできます。

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

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

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

2
(私の個人的な好みと過去のコーディング慣行のために)私は同意しませんが、これを読みやすいのはなぜこのようにしたのかについて理にかなっています。
voodooGQ

6

実際には実際の違いはありません。たとえば、最初のシナリオに従うことを好むのは、1か所に電話をかけ、その下に関数を定義するほうがいいからです。PHPは、何かを実行する前にドキュメント全体を解析します。関数が適切に定義されていれば、すべてが正常に機能し、どちらのシナリオでも利点はありません。

ここで言うのは正しいと思います:あなたのボートを浮かせるものは何でも:)


PHPがドキュメント全体を解析するからでcall_user_func_array()はなく、実行時に関数定義の後に(ほとんどの場合)呼び出されるためですdo_action。そのため、その時点までどこでもフック関数を定義できます。
コブシェニン

1

4年後ですが、検索からここにたどり着くのに役立つと確信しています。

他の人が述べたように、phpはドキュメント全体を解析し、正しい順序で実行するため、違いはありません。好きなように。

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

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

私は後ろ向きに考える傾向があります。目標指向の場合。だから、「フックで関数バーをやっています。さて、今、関数は何をしますか?」と読みたいです。

関数のコンテキストをより適切に設定します。もちろん、これは私の個人的な好みです。好きなことをしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.