フックを使うことで、コア部分やテーマ、プラグインを直接修正することなく、独自の処理を追加してカスタマイズすることができる。
アクションフックとフィルターフックの違い
WordPressでフックを使いたい時、アクションフックとフィルターフックの2種類の方法がある。簡単にまとめると下記の通り
- アクションフック > 戻り値を渡さない。
- フィルターフック > 戻り値を渡す。
アクションフックの使い方
アクションフックは、独自で完結する処理を追加したい場合に使うことがメイン。
使い方は下記の関数を使う。
- add_action(’フック名’, ‘実行する関数名’, 優先順位’, 引数の数) > フックしたい処理を追加
- do_action(’フック名’, 引数…) > 追加したフックを実際に実行する
- remove_action(’フック名’, ‘実行したくない関数名’, 優先順位) > 競合などで、余計な処理をしてしまうアクションフックを削除
フックしたい場所を探す
ソースコードを追っていて、ここにフックを追加したいという場合は問題ないが、追加したい処理をどこでフックするか調べたい場合は、とっかかりとして do_action( で Grep をかける。
Grep されたリストから、それっぽいフック名にあたりをつけて、実際にどこでフックされるかを確認する。
実行するフックを追加する
do_action(‘hoge’) でフックしたければ、下記のようにアクションを追加する
// 関数を定義
function foo() {
echo "foo";
}
// アクションフックを追加
add_action('hoge', 'foo', 10);
do_action に引数が定義されていて、受け取りたい場合は、フックしたい関数に引数を定義してあげればよい。
追加したフックを削除する
プラグインの追加や独自カスタマイズで、望まないフックが追加されている場合は下記のように削除する。
add_action('hoge', 'foo', 10);
// 優先順位が指定されている場合は一致させないと削除できない
remove_action('hoge', 'foo', 10);
優先順位が指定されている場合は、一致させないと削除することができないので注意。
フィルターフックの使い方
フィルターフックは、処理の途中で値を受け渡しして加工するなどの処理に使うのがメイン。
使い方は下記の関数を使う。
- add_filter(’フック名’, ‘実行する関数名’, 優先順位, 引数の数) > フックしたい処理を追加
- apply_filters(’フック名’, 戻り値格納用引数, 引数…) > 追加したフックを実際に実行する
- remove_filter(’フック名’, ‘実行したくない関数名’, 優先順位) > 競合などで、余計な処理をしてしまうアクションフックを削除
フックしたい場所を探す
アクションフィルターと同様に apply_filters( で Grep をかけてやる。
do_action( でも実行されるようなので注意。※未検証
実行するフックを追加する
apply_filters(‘hoge’, $value) でフックしたければ、下記のようにアクションを追加する
// 関数を定義
function foo($value) {
// $value の値を加工
return $value;
}
// フィルターフックを追加
add_filter('hoge', 'foo', 10);
$result = apply_filters('hoge', $value);
apply_filters の第2引数と add_filter の戻り値の方は同じでないといけない。apply_filters の第3引数以降は、戻り値として返却されない。
追加したフックを削除する
プラグインの追加や独自カスタマイズで、望まないフックが追加されている場合は下記のように削除する。
add_filter('hoge', 'foo', 10);
// 優先順位が指定されている場合は一致させないと削除できない
remove_filter('hoge', 'foo', 10);
優先順位が指定されている場合は、一致させないと削除することができないので注意。
コメント