apply_filters、add_filter は WordPress の関数で、テーマをカスタマイズするために使用します。
apply_filters は、テーマのテンプレートファイル内や、プラグインのファイル内で使用します。
また、add_filter は、テーマの functions.php や、プラグインのファイル内で使用します。
では、この2つの関数は実際どういう働きをするのでしょうか。
フィルターフックについて
この関数を理解するためには、フィルターフックについて理解する必要があります。
フィルターフックとは、様々な種類のテキストがデータベースまたはブラウザ画面に送信される前に WordPress が変更を行うフックです。
例えば、
1 2 3 4 5 6 7 8 9 |
<?php $a = 'Hello!'; $b = 'GoodBye!'; echo $a; function my_func($atr1,$atr2){ return $atr1 . $atr2 . ' :柏原よしえ'; } ?> |
上記の出力結果は、
Hello!
となりますが、
3行目と4行目の間に $a = my_func($a,$b); を入れれば、出力結果は、
Hello!GoodBye! :柏原よしえ
になります。
my_func($a,$b) は、関数を実行する命令ですが、この代わりになるのがアクションフックです。
my_func($a,$b) は、関数名 my_func しか実行できませんが、アクションフックでは、複数の関数を決められた順序で実行できます。
apply_filters とは
関数リファレンス/apply filters – WordPress Codex 日本語版 の説明によると、
「フィルターフックに追加された関数を呼び出します。
この関数により、フィルターフック $tag に付加されたコールバック関数が呼び出されます。この関数を、$tag パラメータを使用して新しく指定したフックの名前と一緒に呼び出すことで、フィルターフックを新規作成することができます。」
だそうです。
フィルターフック という単語が何度も出てきてややこしいですね。
これをわかりやすく言い換えると、この関数は、
フィルターフックを作成して、そのフィルターフックに追加された関数を呼び出す働きをする。
ということです。具体的には、次のようになります。
1 |
<?php apply_filters('hoge', $a, $b); ?> |
上記の説明
フック名 hoge というフィルターフックを作成する。 (以降便宜上、このフィルターフックのことを「フックhoge」と表記)
add_filter 関数で「フックhoge」にセット (フック)された関数に $a、$b を引渡しその関数の返り値を受け取る。
返り値が存在しないか、「フックhoge」にセットされた関数がないときは、$a を返す。
add_filter とは
関数リファレンス/add filter – WordPress Codex 日本語版 の説明によると、
「指定したフィルターフックに、関数をフックします。
フィルターは、様々な種類のテキストがデータベースまたはブラウザ画面に送信される前に WordPress が変更を行うフックです。プラグインは、フィルター API を利用して、指定したテキストをその時点で変更する PHP 関数を実行できます。」
だそうです。
この関数の働きについて書いてあるのは1行目だけですね。
2行目からはフィルターフックの説明になっています。
ということで、この関数は、
指定した フィルターフック に関数をセット (フック)する働きをする。
ということです。具体的には、次のようになります。
1 |
<?php add_filter('hoge', 'my_func', 10 ,2); ?> |
上記の説明
「フックhoge」 に、関数 my_func をセット (フック)する。
関数 my_func を実行する優先度は 10 である。 (他に「フックhoge」にセット (フック)された関数があるときは、優先度の数字の小さい順に apply_filters 実行時に実行する。)
apply_filters から関数 my_func に引き渡す引数の数は2個である。
apply_filters と add_filter のまとめ
1 2 3 4 5 6 7 8 9 10 |
// テーマのテンプレートファイル内 $a = 'Hello!'; $b = 'GoodBye!'; echo apply_filters('hoge', $a, $b); // functions.php 内 add_filter('hoge', 'my_func', 10, 2); function my_func($atr1, $atr2){ return $atr1 . $atr2 . ' :柏原よしえ'; } |
実行結果は、
Hello!GoodBye! :柏原よしえ
になります。
7行目がなければ、実行結果が、
Hello!
になります。
カスタマイズしたいところを、WordPress のフィルターフック一覧で探したり、テーマ内のテンプレートファイル内の apply_filters を探せば、テーマのテンプレートファイルを変更せずにカスタマイズすることができます。
apply_filters が多く存在するテーマは、カスタマイズしやすいと言えます。
子テーマ (child theme) を作って、そのファイルに functions.php を作成してその中で add_filter を使用すれば、WordPress 本体やテーマのアップデートをしても上書きされてしまうことはありません。
追記
「フィルターフック the_content の使用例。」 に、フィルターフックの使用例を載せましたので、ご参照ください。
1 個のコメント
apply_filters と add_filter の使用方法。 | WEBデザイン&WEBプログラミング -sei2の日記- http://t.co/vFbBv5TFWa @seitwoさんから
6 Trackbacks
[…] add_filterとapply_filtersについて http://blog1.dd-company.com/using-apply-filters-and-add-filter/ […]
[…] や理解についてはこちらがとても参考になりました。 apply_filters と add_filter の使用方法。 | WEBデザイン&WEBプログラミング -sei2の日記- 関数add_filterについてもこちらを見てみてくださいね […]
[…] や理解についてはこちらがとても参考になりました。 apply_filters と add_filter の使用方法。 | WEBデザイン&WEBプログラミング -sei2の日記- 関数add_filterについてもこちらを見てみてくださいね […]
[…] や理解についてはこちらがとても参考になりました。 apply_filters と add_filter の使用方法。 | WEBデザイン&WEBプログラミング -sei2の日記- 関数add_filterについてもこちらを見てみてくださいね […]
[…] http://blog1.dd-company.com/using-apply-filters-and-add-filter/ ここが判りやすい、若干……例えが古いが。 […]
[…] 分かりやすいと感じた解説はこちらの記事でした。 SEI2の日記 様 apply_filters と add_filter の使用方法 HACKNOTE様 apply_filtersとadd_filter […]