【WordPress】フックを解説!(概念編)

KUSANAGI

WordPressについて深く知るために必要となってくるのが、「フック」の知識です。
今回は、「フック」について説明します。
1回目は概念から。

フック

フックとは、

WordPressの実行プロセスの一定のタイミングで、事前に登録されたコールバックに特定の処理を実行させるWordPressの仕組み

詳解WordPress

「フックだから、なんか引っ掛けてなんかするんじゃないの?」という推測はたちますが、カタカナが多いので、紐解いていくとWordPressの実行プロセスとは、このサイトで見やすいところにおいているこちらのことです。

コールバックとは、IT用語辞典を見ると

コールバックとは、

コンピュータプログラム中で、ある関数などを呼び出す際に別の関数などを途中で実行するよう指定する手法のこと。呼び出し側の用意した関数などを、呼び出し先のコードが「呼び出し返す」(callback)ように登録する。

http://e-words.jp/w/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF.html

つまり、とある関数を呼び出す時に別の関数も途中で割り込んで実行するように指定することだそうです。
「歩く」というプログラムの関数の途中にスキップするという関数を実行するように指定するような感じでしょうか。

このフックの仕組みは、プラグインでよく利用する他、WordPressの本体(コアと呼ぶ)にも使われているものです。

フックには、2種類あります。

アクションフック

1つ目は、アクションフックです。
アクションとは、

WordPressの実行プロセスの一定のタイミングをトリガーとして、
事前に登録されているコールバックを実行し、特定の処理を割り込ませるWordPressの仕組みのことです。

特定の処理の実行そのもののため、実行されたコールバックからの戻り値を利用しません。

  • 特定の処理を割り込ませるのがアクションフック
  • 戻り値は利用しないのがアクションフック

特定のアクションに関数をフックするために利用するのが、
add_actionです。

<?php add_action( $hook, $function_to_add, $priority, $accepted_args ); ?>

$hook
(文字列) (必須) $function_to_add がフックされるアクション名。例えば、wpというアクションフックは、関数内でクエリが解析されて投稿が読み込まれ、テンプレートが実行されるまでの間に実行する。出力にテンプレートを必要しないデータにアクセスする場合に活用できるものです。

$function_to_add
(コールバック) (必須) フックする関数名。

$priority
(整数) (オプション) 特定のアクションに関連づけられている関数が実行される優先順序を指定する。

$accepted_args
(整数) (オプション) フックした関数が受け入れられる引数の数。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_action

フィルターフック

2つ目は、フィルターフックです。
フィルターとは、

WordPressの実行プロセスの一定のタイミングをトリガーとして事前に登録されているコールバックを実行し、WordPressの特定の変数の値を変更するWordPressの仕組みのことです。

フィルターフックの目的は特定の変数の値の変更ですので、実行されたコールバックからの戻り値を利用して、特定の変数の値を変更します。

  • 特定の変数の値を変更するのがフィルターフック
  • 戻り値を利用するのがフィルターフック

指定したフィルターフックに、関数を登録するために利用するのが、
add_filterです。

<?php add_filter( $tag, $function_to_add, $priority, $accepted_args ); ?>

$tag
文字列) (必須) $function_to_add
 引数で指定した関数を登録するフィルターフックの名前。例えば、the_titleは、画面を表示する前にデータベースから取得した投稿タイトルに適用されるフィルターフックです。

こ$function_to_add
コールバック) (必須) フィルターが適用された時に呼び出される関数の名前。

$priority
整数) (オプション) フィルターフックに登録された関数の中で、この関数を実行する順序。

$accepted_args
整数) (オプション) 関数が受け取る引数の個数。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_filter

Hello, Dollyプラグインの例

Hello, Dollyというプラグインはご存知でしょうか。WordPressのデフォルトに入っているなんの役に立つかわからないプラグインです。
機能としては、有効化すると管理画面の右上にルイ・アームストロングの「Hello, Dolly」という歌の歌詞をランダムで出力するというものです。
このプラグインファイルを見てみると、add_actionを使っています。

30 // This just echoes the chosen line, we'll position it later
31 function hello_dolly() {
32     $chosen = hello_dolly_get_lyric();
33     echo "<p id='dolly'>$chosen</p>";
34 }
35
36 // Now we set that function up to execute when the admin_notices action is called
37 add_action( 'admin_notices', 'hello_dolly' );

この37行目で使われているadmin_noticesというアクションフックは、管理画面においてエラーメッセージなどを表示させるものです。
こういった身近なところからもアクションフックについてわかるかと思います。

話はそれますが、このHello, Dollyは少しいたずらができます。
具体的には、hello_dolly_get_lyric()という関数内の$lyricsという変数に1行ずつ好きなテキストを入れていけば管理画面の右上に自分の指定したテキストがランダムで出力されます。

オリジナルは、こんな感じです。

15 function hello_dolly_get_lyric() {
16     /** These are the lyrics to Hello Dolly */
17     $lyrics = "Hello, Dolly
18 Well, hello, Dolly
19 It's so nice to have you back where you belong
20 You're lookin' swell, Dolly
21 I can tell, Dolly

僕は、とりあえず著作権とか内容に君が代で試してみました。

15 function hello_dolly_get_lyric() {
16     /** These are the lyrics to Hello Dolly */
17     $lyrics = "君が代は
18     千代に八千代に
19     さざれ石の
20     いわおとなりて
21     苔のむすまで";

すると、このようになりました。

スナフキンの名言とか入れておくと面白いかもしれないですね笑

まとめ

最後のほうがかなり話がそれましたが、以上がWordPressに欠かせない「フック」とその種類である「アクションフック」「フィルターフック」でした。
今回は実用例などを踏まえての説明をしなかったので、まずは概念から掴んでいけたらと思って書きました。

コメント

タイトルとURLをコピーしました