【WordPress】アクションフックとフィルターフックをシンプルな例で理解する

17views
サムネイル

WordPressといったCMSは独自にカスタマイズできることが大きなメリットです。オリジナルのPHPファイルを追加したり、プラグインを導入して自分だけのWEBサイトを作れるようになります。

WordPressを使っていれば、テンプレートは配布されているものでも、独自でプログラムを書いてカスタマイズをしようと思ったことのある人は多いと思います。

初めのうちは検索して見つけたプログラムをコピペして、functions.phpにぶち込んでいる人も多いでしょう。そのコードをよくみると、add_action(…)やadd_filter(…)といった関数がよく使われていることがわかります。

今回はこの2つの関数の説明と違いをサンプルを使いながら解説します。

サンプルコードを用意

function example_func ($a = "Fashion", $b = "Monster") {
  echo "$a $b";
}
example_func();
// "Fashion Monster"

練習としてfunctions.phpにこのプログラムを用意しました。

WordPressにFashion Monsterと出力されます。

アクションフック(add_action)とは

アクションフックとは関数が追加で新たな関数の挿入を予約できるシステムです。add_actionはdo_actionという関数とセットで使われていて、例えば

add_action("init", "example_..");

というアクションフックを追加するとしたら、どこかのファイルに、

do_action("init");

と記載されている部分があり、そこのコードが実行されるタイミングで追加した関数も実行してくれるようになります。

先ほどの例を少し改造してみます。

function example_func ($a = "Fashion", $b = "Monster") {
  do_action("example_action");
  echo "$a $b";
}
example_func();

“example_action”というアクションフックを用意しました。

ここにアクションを追加してみます。

add_action("example_action", "pamyu");
function pamyu () {
  echo "pamyu:";
}
function example_func ($a = "Fashion", $b = "Monster") {
  do_action("example_action");
  echo "$a $b";
}
example_func();
// "pamyu:Fashion Monster"

$aと$bが出力される前にdo_actionが読み込まれ、このフックにpamyuという関数が予定されているので出力される文字列は”pamyu:Fashion Monster”となります。

フィルターフック(add_filter)とは

こちらもadd_filterとapply_filterと対応している点は同様です。アクションフックは関数の追加を予約していたのに比べて、フィルターフックは既存の変数や配列の変更も想定しています。先ほどの例を用いてサンプルを見ていきます。

function example_func ($a = "Fashion", $b = "Monster") {
  do_action("example_action");
  echo apply_filters("example_filter",$a) . " $b";
}
example_func();

“$a $b”だったところの$aにフィルターフックを追加しました。なので”example_filter”フィルターフックに追加すると$aの値を用いて変更や削除、追加ができるようになるわけです。以下のフィルターを追加した場合

add_filter("example_filter", "tajima");
function tajima ($a) {
  $a = "tajima is $a";
  return $a;
}
function example_func ($a = "Fashion", $b = "Monster") {
  do_action("example_action");
  echo apply_filters("example_filter",$a) . " $b";
}
example_func();
// "tajima is Fashion Monster"

このように$aの値の前に”tajima is “という文字列を追加することができました。

まとめ

今回はアクションフックとフィルターフックを解説しました。WordPressはフィルターフックについてしっかり理解するとカスタマイズ力がとても上がります。

ちなみにアクションフックは内部的にはフィルターフックのエイリアスになっていますが、使いやすいのでわかりやすいところから感覚的に理解して使い分けると良いと思います。

カテゴリー