私はそれがWordPressテーマまたはプラグイン開発に従って良い習慣であるかどうか知りたいのです。
add_action('init','all_my_hooks');
function all_my_hooks(){
// some initialization stuff here and then
add_action('admin_init',-----);
add_action('admin_menu',----);
// more like so
}
ありがとう
一般的に:はい、あなた自身のコードを起動するための専用フックを待ちます。 決して 単にオブジェクトインスタンスをグローバル名前空間にスローするだけです。しかしinit
はめったに必要ではありません。
あなたはできるだけ遅くフックします。あなたの最初のコードがwp_head
で実行される場合は、以前のフックを使用しないでください。 カスケードフックさえできます :
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
init
フックについて:代わりにwp_loaded
を使用してください。これはinit
の後とms_site_check()
が呼び出された後に実行されます。これにより、マルチサイトインストールで無効なサブサイトでプラグインを実行することを避けられます。他のすべては同じです。
これらの理由から、このプラクティスのbigの利点は見当たりません。
add_action
およびadd_filter
関数は、すべてのフィルターとアクションを保持するグローバル変数$wp_filter
にエントリを追加するだけです。 ソースを参照 。関数を呼び出しません。コードはonlyが実行され、do_action
およびapply_filters
が(適切なフック名で)呼び出されたときに発生します非常に遅いフックする必要があります。
そうすると、グローバル変数$wp_filter
が大きくなり、必要なメモリが増えます。しかし、新しい関数の作成にも同じ問題があると思います。
one関数にすべてを入れると、テーマ/プラグインのすべてのファイルのすべてのフックを記憶するように強制します。あなたは次のようなことをしません:
header.php
:ヘッダーで発生するもの(メニュー、スクリプトの登録など)にフックとコールバック関数を追加しますcontent.php
:コンテンツをフィルタリングするためのフックとコールバック関数を追加しますadmin-menu.php
:フックとコールバック関数を追加して管理メニューを追加します(これらのファイルがテーマ/プラグインに置かれていると仮定します)
その代わりに、次のことを行う必要があります。
header.php
、content.php
、admin-menu.php
にコールバック関数のみを配置します=> header.php
ファイルの内容を見ると何が起こるかわかりにくくなります。これらのコールバックがいつ発生するかを知るために検索する必要があります。
テーマ/プラグインに複数のクラスがある場合の状況を考えてください。すべてのクラスのすべてのフックを1か所に配置しますか?または、各クラスにすべてのフックを保持するラッパー関数がありますか?冗長すぎます!
これらの理由よりも、個人的なスタイルだと思います:)。 Hybridのようないくつかのフレームワークは、あなたが言ったことを行うと思います。これらのフレームワークを掘り下げるのが難しい場合があります!