WordPressのアクションフックとフィルターフックについて

WordPressでは、PHPの関数を組み合わせて様々な処理を実行します。
ただ、WordPressのコアの処理を一部置き換えたり、何か処理を追加したい場面もあるかと思います。
このようなときに、コアのコードを直接書き換えようとすると、WordPressがバージョンアップする度に書き換え直すという二度手間な作業が発生します。
したがって、コアの部分を書き換える事はオススメができません。
そんな時はアクションフックとフィルターフックを使用します。
今回は2つのフックの使い方と違いをまとめたいと思います。
フックとは
フックとはWordPressコアの処理を部分的に変更する仕組みです。
WordPressのコアでは、様々な処理の節目にフックが用意されている事が多いです。
フックに対し独自のプログラム(関数)を登録しておくことで、フックのタイミングでWordPressからその関数が呼び出されます。
その関数の中で、WordPressが行った処理を一部変更したり、元々なかった処理を追加したりすることができます。
フックの動作について

アクションフックについて
アクションフックは、WordPressの処理の節目で、独自の関数を実行できる仕組みになります。例えば、「投稿を保存した直後に何かを処理したい」という場合は、「sava_post」というアクションフックに関数を登録します。
アクションフックに関数を登録する
アクションフックに対して独自の処理を登録するには、「add_action」という関数を実行します。add_action関数はfunctions.phpテンプレートの中で実行することが多いです。
add_action関数は以下のように書きます。
add_action(フック名,コールバック,優先度,パラメーター数);
パラメーター | 概要 |
---|---|
フック名 | 登録したいフックの名前 |
コールバック | フックのタイミングで実行する関数の名前。 クラスの中でメソッドをコールバックにする場合は、 「array(&$this,’メソッド名’)を渡す |
優先度 | 同じフックに複数の関数が登録されている場合の、実行の優先順位。 小さな数値を指定するほど早く実行される(初期値は10) |
パラメーター数 | フックの関数に渡されるパラメーターの数。 なお、フックの種類によって、パラメーターの数は異なる |
※コールバック(関数)とはフィルターが適用されたときに呼び出される関数になります。
主なアクションフック
WordPressのコアには多数のアクションフックが用意されてます。
フック名 | 実行されるタイミング |
---|---|
init | WordPressのコアの読み込みが終わり、HTTPヘッダーを出力する前 |
after_setup_thema | テーマの準備ができた |
widgets_init | サイドバー登録の準備ができた |
pre_get_posts | クエリを実行する前 |
switch_thema | 他のテーマに変更された |
save_post | 投稿を保存した |
post_updated | 投稿が更新された |
transition_post_status | 投稿のステータスが変化した |
before_delete_post | 投稿を削除する前 |
delete_post | 投稿を削除した |
trash_post | 投稿をゴミ箱に移動する前 |
trashed_post | 投稿をゴミ箱に移動した |
edit_terms | カテゴリー等の分類を保存する前 |
edited_terms | カテゴリー等の分類を保存した |
admin_init | 管理画面の準備ができた |
load-ページ名 | 管理画面のページ名.phpが読み込まれた |
loop_start | WordPressループが始まる前 |
loop_end | WordPressループが終わった後 |
wp_head | テンプレート内でwp_head関数が実行された |
wp_footer | テンプレート内でwp_footer関数が実行された |
wp_enqueue_script | テンプレートにJavaScriptを挿入する前 |
wp_enqueue_style | テンプレートにスタイルシートを挿入する前 |
フィルターフックについて
フィルターフックは、出力する内容を部分的に置換する際に使用します。
主に、テンプレートタグの出力を置換することに使用します。例えば、「投稿の文中に含まれる全角英数字を半角に置換したい」という場合には、「the_content」というフィルターフックを使用し、置換処理を追加することができます。
フィルターフックに関数を登録する
フィルターフックに関数を登録するには、「add_filter」という関数を実行します。
add_filter(フック名,コールバック,優先度,パラメーター数);
WordPressのコアの多くの関数に、フィルターフックが用意されています。
特にテンプレート内で使う関数では、出力をカスタマイズするために、フィルターフックを使用する場合が多いです。
主なフィルターフック
the_title | 投稿のタイトルを出力する前 |
---|---|
the_content | 投稿の本文を出力する前 |
the_excerpt | 投稿の抜粋を出力する前 |
body_class | body要素のクラスを出力する前 |
post_class | 個々の投稿を囲む要素につけるクラスを出力する前 |
single_post_title | 投稿のタイトルを出力する前 |
wp_list_categorys | wp_list_categorys関数の結果を出力する前 |
wp_dropdown_cats | wp_dropdown_categorys関数の結果を出力する前 |
wp_list_pages | wp_list_pages関数の結果を出力する前 |
comment_text | コメント本文を出力する前 |
comments_number | コメント数を出力する前 |
single_cat_title | カテゴリーアーカイブページのタイトルを出力する前 |
the_tags | the_tags関数で投稿タグを出力する前 |
single_tag_title | タグアーカイブページのタイトルを出力する前 |
the_date | the_date関数の結果を出力する前 |
the_time | the_time関数の結果を出力する前 |
the_author | 投稿者を出力する前 |
まとめ
使い方として、アクションフックは処理の節目で独自の関数を実行する、フィルターフックはテンプレートタグの出力を置き換える。
「どのタイミングで、どういう事をする」というイメージを持ってフックを活用すれば、カスタマイズの幅が広がりますね。
今回は基本的な使い方と、2つのフィルターの違いをまとめましたが実用例に関しては、個別にまとめていきたいと思います。