【WordPress】フィルターフックの使い方と一覧


WordPressの処理の途中で、出力(表示)する内容を部分的に置換(変更)したい場合に使われるの仕組みのことを『フィルターフック(Filter Hook)』といいます。

たとえば、「投稿の文中に含まれる全角英数字を半角に置換したい」といった時には、「the_content」というフィルターフックを使って、置換処理を追加します。

フックとは?

WordPressそのもの(コア)の処理を部分的に変更する仕組みのこと。

フックに対して独自のプログラム(関数)を登録しておくことで、その関数の中で、WordPressが行った処理を一部変更したり、元々なかった処理を追加できます。

WorPressのフックは、大きく分けて、「アクションフック」と「フィルターフック」の2つがあります。

フィルターフックは、主に、「テンプレートタグの出力を置換するのに使われる」と覚えておいてください。

テンプレートタグとは?

WordPressのテンプレートファイルを作成するために使われるタグの総称。

たとえば、<?php bloginfo('name'); ?>などは、タイトルを出力するテンプレートタグ。

フィルターフックを使えば、出力内容を適正化できるわけです。

以下で、フィルターフックの使い方と一覧をご紹介します。

スポンサーリンク

フィルターフックに関数を登録する

フィルターフックに関数を登録するには、「add_filter関数」を使います。

add_filter関数は、add_action関数と同様に、functions.phpの中で実行することが多い関数。なお、add_filter関数のパラメータの内容は、add_action関数と同じです。

この関数は、パラメータを4つ取り、以下のように書きます。


add_filter('フィルターフック名','追加したい関数名',優先度,関数が受け取る引数の個数)

優先度の指定がなく、パラメータ数が1の場合は、「フィルターフック名」と「追加したい関数名」のみでOK♪

各パラメータの内容は、次の通りです。

add_filter関数のパラメータ
パラメータ 内容
フィルターフック名 登録したいフィルターフックの名前
追加したい関数 フックのタイミングで実行する関数の名前。
クラスの中でメソッドをコールバックにする場合は、「array($this,'メソッド名')」を渡す。無名関数を使うことも可能
優先度 同じフックに複数の関数が登録されている場合の、実行の優先順位。「10」が一般的な優先度。小さな数値を指定するほど、早く実行される
関数が受け取る引数の個数 フックの関数に渡されるパラメータの数。なおフックの種類によって、パラメータ数は異なります。
初期値は「1」
関数が受け取る引数の個数は、たとえばfunction文の()の中に書かれる個数などです。

引数が2つ書かれていれば「2」、3つ書かれていれば「3」と書きます(下述する例を参照)。もし、()の中が空欄なら、4つ目のパラメータは記述不要

主なフィルターフックの一覧

フック名 実行されるタイミング
the_title 投稿のタイトルを出力する前
the_content 投稿の本文を出力する前
the_excerpt 投稿の抜粋を出力する前
the_category カテゴリー名を出力する前
body_class body要素のクラスを出力する前
post_class 個々の投稿を囲む要素につけるクラスを出力する前
single_post_title 投稿のタイトルを出力する前
wp_list_categories wp_list_categories関数の結果を出力する前
wp_dropdown_cats wp_dropdown_categories関数の結果を出力する前
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 投稿者を出力する前

たとえば、例をあげると…

たとえば、タイトルにおいて、全角英数字を半角英数字に変更して出力させる場合は、次のようになります。

<?php 
function title_convert($title,$id){
 return mb_convert_kana($title,'rn');
 } 
add_filter('the_title' , 'title_convert',10,2); 
?>

title_convertという関数をfunction文を使って作成し、中に全角英数字を半角英数字する関数(mb_convert_kana関数)を記述します。

そして、タイトルに関するフィルターフック『the_title』に、add_filter関数を使って、作成したtitle_convertという関数をフィルターフック『the_title』を追加します。

3つ目のパラメータには、一般的な優先度である「10」、4つ目のパラメータには、title_convert関数が$titleと$idという2つの変数(引数)を渡すので、「2」を記述します。

スポンサーリンク

フィルターフックを解除する

登録したフィルターフックを解除(remove)したいという場面もあります。

このような時には、「remove_filter関数」を使います。

remove_filter関数とは?

特定のフィルターフックに付加されている関数を除去する関数。WordPressにデフォルト(初期値)で設定されているものも除去できます。

この関数は次のように記述します。基本的に、add_filter関数と同じ。


remove_action('フィルターフック名','解除する関数名',優先度,関数が受け取る引数の個数);

【remove_action関数のパラメータ】
パラメータ 内容
フィルターフック名 解除したい関数があるフックの名前
解除する関数名 解除したい関数の名前。
クラスの中でメソッドをコールバックにする場合は、「array($this,'メソッド名')」を渡す。無名関数を使うことも可能
優先度 同じフックに複数の関数が登録されている場合の、実行の優先順位。「10」が一般的な優先度。
小さな数値を指定するほど、早く実行されます
関数が受け取る引数の個数 フックの関数に渡されるパラメータの数。
なおフックの種類によって、パラメータの数は異なります。初期値は「1」

自分で登録した関数だけでなく、WordPressのコアがデフォルトで登録した関数も解除できます

さらに、remove_filter関数でフックを解除した後、add_filter関数で同じフックを登録し直すことも可能。つまり、一時的にフックを解除し、すぐに元に戻すようなこともできるわけです。

使い方は、基本的に、add_filter関数と同じ。”解除したい関数があるフック名”と、”解除したい関数”を記述するだけ。

スポンサーリンク
ページ先頭へ