web-dev-qa-db-ja.com

init()フックにフックを追加する利点は何ですか?

このアプローチを使って新しいフックを追加するプラグインがたくさんあります。

add_action('init', function() {
   add_action('SOME_LATER_HOOK', xxx);
   add_filter('SOME_LATER_FILTER', yyy);
});

なぜ彼らは単にフックを直接追加しないのですか?とにかく何の利益もないようです。パフォーマンス

なぜじゃない

add_action('SOME_LATER_HOOK', xxx);
1
Yoga

アクションやフィルタを追加する前に、コードを実行したいことがあります。これには、ユーザーの許可の確認、ページリクエストの種類の確認、他のプラグインがアクティブかどうかの確認などが含まれます。

これらのチェックのいくつかは、WordPressの実行を通じた何らかの方法で可能になるかもしれません - そのため、プラグインのインクルードではなく、initフックでその作業を行うのが合理的に一般的です。

このようなことをすべて行うということは、たとえあなたの行動の中にはそれを必要としないとしても、あなたの「初期化」がすべて一箇所にあることを意味します。

3
Lee Willis

必要ならば、initから1つの関数を削除するほうが、全体から2つ(おそらく50)よりも簡単です。

一般的にinitフックの前には何も実行しないことをお勧めします。したがって、必須の技術的な意味によって強制されない場合でも、これは典型的な出発点です。

2
Rarst

フックにフックを追加することは、私にはかなり負担が大きいようです。リソースの無駄遣いです。それを行う場合、 add_user_func_array() を2回以上呼び出します。そうしないと、1つだけになり、その前に処理された他の作業は言うまでもありません。

例外は次のとおりです。

  • 関数を使用する必要があり、その関数が使用可能であることを確認する必要がある場合。これは、かなり早い段階でロードされるmu-pluginsで必要になる場合があります ここで行うように 。たとえば、MUプラグインは、プラグインのロード後にフックされない限り、プラグインコードを使用できません。
  • または、作業を行うフックで簡単に入手できない情報を提供するフックがある場合、- この回答のように

また、フックを「連鎖」させて、少しの柔軟性を提供することもできます 特別な目的のコードに対して

0
s_ha_dum