WordPressのアクションフックって何なの?そもそもフックがよく分からないんだけど、、、誰か解説してほしいなあ
本記事は上記のような疑問に役立つ記事となっております。
WordPressの開発を行なっていると「フック」(hook)という概念が出てきますが、正直最初は概念がよく分からないですよね。
そのためこの記事ではWordPress開発初心者の方に向けてフックが何か、またアクションフックが何かについて詳しく解説していこうと思います。
フックやアクションフックがわからない、という方は是非ご覧ください。
フックとは
では早速ですがフックについて見ていきましょう。
フックとは、WordPress内で関数などの処理を行うタイミングを決めるものです。
調べていると色々な言い回しがあって理解にしにくいフックですが、「タイミングを決めるもの」という表現が個人的にしっくりくるかなと思います。
ちなみに、「フック = hook = 引っ掛ける」などの意味があります。
WordPressで作ったサイトにはプログラミングを処理するタイミングがあります。
例えば「header部分を読み込んだ後」や「WordPressのコードが完全に読み込まれた後」というようにフックによって処理をするタイミングを決めることが出来ます。
例えば以下のようなフックがあります。
・wp_loaded:WordPressが完全に読み込まれた後
・the_posts:投稿データが内部処理された時
・admin_bar_init:Adminバーの初期設定時
などなど。
フック自体はかなり数が多く、全てを使いこなすのは不可能かもしれません。
そのため、必要に応じて使いたいものを調べて使う、くらいで良いと思います。
そして上記に挙げたもの、これらはフックの中でもアクションフックと呼ばれるもので、アクションフック以外にはフィルターフックというものもあります。
今回はこのアクションフックについて深掘りしていきたいと思います。
アクションフックとは
アクションフックとは、関数などの処理を任意の場所で処理出来る機能です。
例えば、WEBサイトを読み込む時にはWordPressのindex.phpやstyleシートはもちろん、single.phpやfunctions.phpなどのファイルも全て読み込むわけですが、全てのコードを一気に処理してしまうと正しく動作してくれなかったり、望む結果が得られなかったりします。
そのため、任意の場所でアクションフックを設定することで「このタイミングでこの処理をしてね」という指示をプログラムし、ブラウザに正しく処理するタイミングを指示できるということです。
例えば以下のコードは、functions.phpで書いているカスタム投稿タイプを作っている関数ですが、この関数を処理するタイミングをアクションフックで決めることが出来ます。
add_action('init',function(){
register_post_type('staff',[
'label' =>'従業員',
'public' =>true,
'menu_position'=>5,
'menu_icon'=>'dashicons-businessman',
'supports'=>['title','thumbnail','editor','page-attributes'],
'hierarchical'=>true
]);
});
上記では、'init'というアクションフックを使っていますが、このアクションフックが作動するタイミングはWordPress.orgに以下のように書かれています。
Fires after WordPress has finished loading but before any headers are sent.
引用元:WordPress.ORG
上記を英訳すると以下のようになります。
・WordPressの読み込みが完了した後、headerが送信される前に発火します。
つまり、WordPressの読み込みが終わってから、headerのコードが読み込まれる前に処理しますよということですね。
headerといえば通常、サイトの一番上の方に位置するものですので、ほぼほぼ一番最初に読み込まれるアクションと考えてもらえればと思います。
このように、処理する場所を決める機能を「アクションフック」と言います。
実際にアクションフックの書き方についても見ていきましょう。
アクションフックの書き方
では次にアクションフックの書き方ですが、基本的には以下のように書きます。
<?php add_action('フック名','実行する関数' ); ?>
となります。
「add_action」は関数にフックをつけるための書き方で、「アクションフックを付与する時に書くものなんだな」と覚えて下さい。
先に記述した以下のコードでは、
add_action('init',function(){
register_post_type('staff',[
'label' =>'従業員',
'public' =>true,
'menu_position'=>5,
'menu_icon'=>'dashicons-businessman',
'supports'=>['title','thumbnail','editor','page-attributes'],
'hierarchical'=>true
]);
});
initがフック名で実行する関数のところに関数の内容が書かれていることが分かりますね。
これが基本的な書き方です。
どのタイミングでどのアクションフックを使うか?
では、どのタイミングでどのアクションフックを使うか、という点ですが、これを自分で考えることはあまりなく、基本的にはWordPress Codex(WordPressの公式オンラインマニュアル)に書いている内容を確認すると答えが載っていることが多いです。
例えば以下のように「説明」として書かれています。
投稿タイプを作成または変更します。 このregister_post_type()は必ず 'init' アクションの中から呼び出してください。 'init' より前に呼び出すと動作しないため、新規作成または変更した投稿タイプも正常に動作しません。
引用元:WordPress Codex
上記のように、関数によって呼び出すタイミングが指定されていることがほとんどなので、使いたい関数がある場合はWordPress Codexでまず検索してみると良いと思います。
アクションフックのメリット
ではアクションフックのメリットについてです。
アクションフックを利用することで、WordPress本体やプラグインを制御することでWordPressの機能を大幅にカスタマイズすることが出来ます。
WordPressのindex.phpやheader.phpなどのテンプレートファイルに直接処理を記述することも可能ですが、functions.phpや自作プラグインの中に記述し、各テンプレートファイルで呼び出すことでテーマ全体で汎用的な機能を持たせることが出来ることもメリットです。
また、テーマ自体にアップデートがかかるとその度にテーマの内容を変更する必要が出てきますが、プラグインなどに記述することでアップデートの影響を受けることなく、処理することが出来ます。
終わりに
いかがでしたでしょうか。
アクションフックを使うことで、関数の処理するタイミングを決めることが出来ました。
ちなみにアクションフックはこちらのWordPress Codexに一覧が載っているため、是非参考にしてみてください。
フックを使えるようになるとWordPress開発の幅がグッと広がるため、しっかり理解していきましょう。