wordpressテーマのカスタマイズにはかかせないフック機能を理解する

wordpressにはフックという機能があります。フック機能はwordpressテーマをカスタマイズする時にかかせないもので、仕事でもプライベートでも普段からよく使っています。今一度自分の中での確認と理解を深めるため記事としてフック機能をまとめました。

wordpressのフックとは

フックはイベントでアクションとフィルターの2種類があります、そのイベント発生後のタイミングで、発生するまでにそのイベントにフックした処理を実行します。処理は関数で作成してフックしておきます。イベントに処理を引っ掛けておくイメージです。フックというワードがいろんな意味で使われているので混乱しますが、簡単に言うと、特定のタイミングで登録していた処理を実行する機能です。

wordpressのフックの使い方

wordpressのフックにはアクションとフィルターの2種類があります。後で詳しく書きますが、アクションフックにはadd_action関数を使い、フィルターフックにはadd_filter関数を使い処理をフックします。これらはfunctions.phpに記述します。どちらもイベントをきっかけとして処理を実行することには変わりありません。

アクションフック

アクションフックは特定のアクション発生後のタイミングでフックした処理を実行します。関数の登録にはadd_action関数を使います。アクションは特定の場所で実行される関数のことです。

add_action($hook, $function_to_add, $priority, $accepted_args);
// $hook => フックされるアクション
// $function_to_add => アクション発生後に実行する関数
// $priority  => 実行する関数の優先順序(初期値は10)
// $accepted_args => 実行する関数の引数の数(初期値は1)

アクションフックの使い方は上記の通りです。$priorityと$accepted_argsは初期値があるので場合によっては省略できます。

アクションフックを使う

例えばhead要素にコードを追加したい時はwp_headアクションを使います。wp_headアクションはwp_head関数が呼び出されたときに発生します。

add_action('wp_head', 'add_javascript');
function add_javascript() {
  $script = '<script>console.log('hook');</script>';
  echo $script;
}

上記のコードではhead要素内にscript要素のコードを追加しています。

フィルターフック

フィルターフックはフックされたフィルターをトリガーにしてフックした処理を実行します。フィルターとはデータの入出力時にデータが通過する関数のことで、wordpressの入出力のそのほとんどが最低1つ以上のフィルターを通過しているそうです。フィルターフックではこのフィルターが呼ばれるタイミングで処理を実行します。

add_filter($tag, $function_to_add, $priority, $accepted_args);
// $tag => フックされるフィルター
// $function_to_add =>フィルター発生後に実行する関数
// $priority => 実行する関数の優先順序(初期値は10)
// $accepted_args => 実行する関数の引数の数(初期値は1)

フィルターフックの使い方は上記の通りです。アクションフックと同様$priorityと$accepted_argsは初期値があるので場合によっては省略できます。

フィルターフックを使う

よく使うものとして抜粋の文字数を変更する処理があります。これはexcerpt_lengthというフィルターを使います。

add_filter('excerpt_length', 'custom_excerpt_length');
funciton custom_excerpt_length($lenght) {
  return 50;
}

参考サイト