filter hookフィルターフックを超わかりやすく解説

フィルターフックをわかりやすいように解説しようと思いますが、主に自分用に理解を深めるために書いてみます。

そもそもなんでフィルターフックを使うのか?

例えばこんな関数があるとします。

function my_original_func($text) {
$text = “頭にこれがつくよ:” . $text;
return $text ;
}

echo my_original_func(‘ここは本文’);

とすると結果は

「頭にこれがつくよ:ここは本文」

こんな文字列が出力される。

このmy_original_funcの処理を変更を加えたいとき、こんな風にすると

function my_original_func($text) {
$text = “頭にこれがつくよ:” . $text;
$text = $text . “:お尻にこれがつくよ” ;
return $text ;
}

echo my_original_func(‘ここは本文’);

とすると今回の結果は

「頭にこれがつくよ:ここは本文:お尻にこれがつくよ」

こんな文字列が出力される。

my_original_func関数自体を書き直したわけだね。

元の関数はいじりたくない

my_original_func関数自体はなにもいじらずにとっておきたい。

だけど処理結果を変更したい。

そんなときに使えるのがフィルターフック。

 

my_original_funcをapply_filtersを使ってこんな風に書いておく。

function my_original_func($text) {
$text = “頭にこれがつくよ:” . $text;
return apply_filters( ‘my_filter_hook’, $text );
}

処理結果は前の時と何も変わらない。

ここでフィルターの追加をおこなうよ。

add_filter(‘my_filter_hook’, ‘my_filter_callback’);

これはmy_filter_hookが呼ばれたら関数my_filter_callbackを作動させる、という意味になります。

なので関数my_filter_callbackを設定しないといけない。

function my_filter_callback($text) {
$text = $text . “:お尻にこれがつくよ” ;
}

一緒に書いてみる。順番はどっちが先でも大丈夫。

function my_filter_callback($text) {
$text = $text . “:お尻にこれがつくよ” ;
}
add_filter(‘my_filter_hook’, ‘my_filter_callback’);

さて、これで

echo my_original_func(‘ここは本文’);

とすると今回の結果は

「頭にこれがつくよ:ここは本文:お尻にこれがつくよ」

こんな文字列が出力される。

元のmy_original_funcは書き直さなくても後から処理内容を変更出来るわけ。

引数の変化を見ていこう。

my_original_func(‘ここは本文’);

my_original_funcの処理で、

変数$text の内容は「ここは本文」から

「頭にこれがつくよ:ここは本文」になる。

そして、

my_original_func関数内の

apply_filters( ‘my_filter_hook’, $text );

ここでは引数$textは「頭にこれがつくよ:ここは本文」が入っている。

そしてmy_filter_hookをイベントとして捉えると

my_filter_hookの発火でmy_filter_callbackが呼ばれる。

その時の引数 $text は「頭にこれがつくよ:ここは本文」。

my_filter_callback関数の処理で

「頭にこれがつくよ:ここは本文:お尻にこれがつくよ」

と変更されてそれが、

my_original_func関数内の

apply_filters( ‘my_filter_hook’, $text )の結果としてreturnされる。

こういう段取りだ。

実際はどう使われいるか?

プラグインのソースを読み解いていると頻繁に

apply_filters( ‘フィルター名’, 引数 )

が書かれている。

引数には処理結果が入っている事が多い。

この処理結果に変更を加えたい場合にテーマ内のfuntions.phpなどに

add_filter(‘フィルター名’,’呼び出される関数名’)+ 呼び出される関数設定

このセットを書いてやると元のプラグインのファイルは変更せずに処理結果を変更する事が出来る。

 

同様に、というかこちらの方が多く使われるのだけれど、

wpにコアファイルで設定されている処理に変更を加えたいときに、該当するフィルターにたいして

add_filter(‘フィルター名’,’呼び出される関数名’)+ 呼び出される関数設定

このセットを書いてやるとwpのコアファイルをいじらずに変更を加える事出来る。

こういうわけなんですよ。