ワードプレスを色々いじっていくと必ずぶち当たる「アクションフック」「フィルターフック」。
なんか面倒くさい〜と思って後回しにしてもワードプレス職人になるには結局身につけなければいけないスキルなんだよね〜。
と言うことで今回はaction hookアクションフックを超わかりやすく解説してみようと思います。
テーマのテンプレートファイルを見てると出てくるdo_actiontってなに?
ワードプレスのテンプレートファイルを見ているとdo_actionが出てくるでしょ?
あれは何か?
例えば特定の固定ページのタイトルらしき<h2>の後に
do_action('bp_after_member_plugin_template');
こんなん出てくる。
わかりやすいようにこう変えましょ。
do_action('ここで何かするよ');
変えました。
そしてfunctions.phpにこう書きます。
add_action('ここで何かするよ','これをするよ); function これをするよ(){ echo 'ここは<h2>の下です'; }
do_action(‘ここで何かするよ’);と書かれた場所に来たら「これをするよ」関数をやってね、
という意味になります。
つまりテンプレートファイルの
do_action(‘ここで何かするよ’);という場所に来たら
「ここは<h2>の下です」という文字が出力(echo)されるというわけです。
ファイルのどこかにマークを付けておいて、そのマークの所に来たら実行する関数をfunctions,phpに書いておくとそのとおりに実行してくれるというわけ。
実行する関数を書かなければ何にも起きない。
テンプレートファイルの作者がこの場所には何らかの処理をしたい人って結構いるだろうな〜
って思ってマーク(do_action)を付けておいてくれると後からカスタマイズする人はそのマークに対して何らかの関数をfunctions,phpに書いておけばいいという大変便利なもの。
それがアクションフックなのですね〜。
なんらかのアクションの場所にフック(引っ掛ける)関数を作って実行させるよ、という感じで覚えるとよいですね。
do_action()は自分でも設定出来る。
処理する関数をテンプレートファイルに直接書いてしまっても、もちろんいいんだけど、マークdo_action()だけして、そのマークのときはこの関数をやるっていう内容はfuncions.phpに書いておくと保守が楽になる場合がある。
例えば同じ処理を複数のテンプレートにやる場合、それぞれのテンプレートに書いたんじゃ変更するとき全部のテンプレートを書き直さなきゃならないでしょ。
でもマークだけして共通の関数はfunctions.phpに書いておけば一箇所の変更で済むわけね。
これを覚えておけば作業効率はアップする事間違いなし。
元のファイルを変更しなくていい
テーマをカスタマイズするときってテンプレートファイルをいじくりまわすんだけど、
do_actionがいっぱい書いてあるとテンプレート自体は変更しないでfunctions.phpだけの変更で済む場合もあるのでこれも非常に便利なのです。
ある特定の<h2>の
「前」と「タグの中」と「後』にdo_actionを書いておくと、あとから必要な時だけ処理をしたい場所に関数を設定する事が出来る。
ifの条件分岐で特定のページのときだけ「タグの中」に何か表示したいという事も出来るわけだ。
アクションフックまとめ
ワードプレスは今回の「アクションフック」と「フィルターフック」が頻繁に出てくるのでぜひぜひ覚えてほしいです。
プラグインなどのファイルを読み解くにも必須ですよ。