y.o.designers-works

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 テンプレートにスタイルシートを挿入する前

参考:プラグイン API/アクションフック一覧

フィルターフックについて

フィルターフックは、出力する内容を部分的に置換する際に使用します。
主に、テンプレートタグの出力を置換することに使用します。例えば、「投稿の文中に含まれる全角英数字を半角に置換したい」という場合には、「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 投稿者を出力する前

参考:プラグイン API/フィルターフック一覧

まとめ

使い方として、アクションフックは処理の節目で独自の関数を実行する、フィルターフックはテンプレートタグの出力を置き換える。
「どのタイミングで、どういう事をする」というイメージを持ってフックを活用すれば、カスタマイズの幅が広がりますね。
今回は基本的な使い方と、2つのフィルターの違いをまとめましたが実用例に関しては、個別にまとめていきたいと思います。

スポンサーリンク

他にオススメな記事