WordPress のテーマをカスタマイズする上で必要不可欠な機能としてアクションフックとフィルターフックがあります。
これら2つのフックを使いこなせないとWordPressのカスタマイズは全然出来ないと言っても過言ではないくらい重要な要素であり、絶対に知っておく必要があります。
そこで今回はアクションフックとフィルターフックとは一体どういうものなのか、どういう場面で使われるのか解説していきます。
アクションフック・フィルターフックとは
アクションフック・フィルターフックとは、特定の処理のタイミングで行う処理を決定するためのフックです。
WordPressにはHTMLのヘッダーに独自のタグを追加する際などに役立つアクションフックなど様々なアクションフックやフィルターフックが用意されており、それらを活用することで生成されるWebページを細かくカスタマイズすることが出来ます。
- アクセス解析タグを挿入したい
- 記事を更新したときにSlackに通知させたい
- 記事を投稿した際にTwitterに投稿させたい
- 記事の最後に広告を挿入したい
このようなことはfunctions.phpにてアクションフック・フィルターフックを指定して処理を書くだけで実装でき、テーマのテンプレートファイル各種を直接編集する必要はありません。
子テーマを用意すればテーマをアップデートしてもカスタマイズ内容が失われないため、テーマをプログラムレベルでカスタマイズする場合はこれらのフック機能を使いこなせるかが鍵となります。
フィルターフックとアクションフックの違い
フィルターフックとアクションフックに関して大きな差はありません。
記事更新時やログイン時・WordPress読み込み完了時など何らかのアクションの後に実行されるもがアクションフックです。
それに対してフィルターフックは記事の生成完了前やデータベース読み出し時・書き出し時など記事本文などのデータを動的にカスタマイズしたいときに使われます。
アクションフック・フィルターフックの使い方
アクションフックはadd_action関数を使って処理を定義します。
add_action('hook_name', 'function_name');
第一引数にフック名を指定し、第二引数にアクションフック実行時に実行する関数を指定します。そして第三引数は優先順位で、同じアクションフックに登録されている関数が複数あった場合は数字が小さいほうが先に実行されます。
フィルターフックはアクションフックと同じで、フック名・関数名・優先順位を順番に指定していくだけです。関数名がadd_actionではなくadd_filterな点に注意してください。
add_filter('hook_name', 'function_name');
フックに登録する関数はフックの種類によっては引数を受け取ります。例えば記事本文をカスタマイズする用のフィルターフック「the_content」は、引数として記事本文のHTMLを引数として受け取ることができます。
function the_content_sample( $content ) { return $content; } add_filter( 'the_content', 'the_content_sample', 10 );
フックの種類によっては上記のように記事本文だったり、記事タイトル・投稿ID・スラッグなどなど。受け取れる引数の種類や個数が異なりますので、必ず各アクションフックフィルターフックの使用を確認しておきましょう
>>Wordpress Codex – アクションフック一覧
>>WordPress Codex – フィルターフック一覧
アクションフックでできることの例
アクションフックを使えば自由自在にWordPressの挙動をカスタマイズできますが、その中でもカスタマイズで使うことが多い2つのアクションフックについて紹介します。
追加でスタイルシート・JavaScriptファイルを読み込む
wp_enqueue_scriptsというアクションフックを利用することで、スタイルシートファイルがJavaScriptファイルを読み込ませることが出来ます。
function func() { //スタイルシートの読み込み wp_enqueue_style( 'my-style1', 'sample.css'); //JavaScript の読み込み wp_enqueue_script( 'my-js', 'sample.js, array(), null, true ); } add_action('wp_enqueue_scripts', 'func');
このように好きなファイルを読み込ませることが出来ます。もちろんif文を使った分岐処理など様々な条件にあわせて読み込ませるファイルを変更するということも可能です。
headタグ内にmetaタグなどを追加する
親テーマのコードを改変せずheadタグにアクセス解析用のタグなどを挿入したい場合もアクションフックで解決できます。
function add_header_func(){ echo '追加するタグなど'; } add_action('wp_head', 'add_header_func');
アクションフック「wp_head」は生成されるHTMLのheadタグが閉じられる直前に実行されるフックで、このタイミングでechoやprint関数を使って出力することでHTMLタグなどを出力することができます。
出力できるフォーマットに制限はないため、metaタグlinkタグscriptタグ、その他コメントなど何でも出力することが可能です(出力以外の処理を行うことも可能です)
フィルターフックでできることの例
フィルターフックもアクションフックと同じようにたくさん種類があるため、全てを列挙するとキリがありません。全てのフィルターフックを知りたい場合はWordPress Codexのフィルタフック一覧を参照するようにしてください。
ここではフィルターフックを使えばいったいどのようなことができるのかといったことをいくつか紹介します。
記事の先頭・末尾にコンテンツを挿入する
おそらくフィルターフックの中で最も使うことになるthe_contentフック。
このフィルターフックは投稿本文を取得できるフィルターフックで、本文の先頭や末尾に広告などのコンテンツを挿入することが出来ます。
function the_content_sample( $content ) { return $content; } add_filter( 'the_content', 'the_content_sample', 10 );
正規表現など複雑な処理を組み合わせれば、2番目の見出しの上に広告を挿入する・特定のテキストを自動的にリンクテキストにするといったこともできてしまいます。
タイトルタグを書き換える
document_title_partsというフィルターフックを使えばtitleタグを書き換える事も可能です。
引数としてページタイトルをまるごと受け取れるので、末尾や先頭に共通テキストを追加したりページタイツロを全く違うものに書き換えることも可能です。
長すぎる抜粋の文字数を制限する
使用しているWordPressテーマや設定によっては抜粋がかなり長くなってしまったがあります。
そういうときはフィルターフック「excerpt_length」を使うと抜粋のテキストの文字数を制限することが可能です。
function mytheme_custom_excerpt_length( $length ) { return 130; } add_filter( 'excerpt_length', 'mytheme_custom_excerpt_length', 10);
このようにすれば抜粋の文字数を130文字までに抑えることが可能です。抜粋の文字数を制限するだけでなく、抜粋にテキストを追加することもできたり、0にすれば抜粋そのものを無くしてしまうことも出来てしまいます。
リンクを置換する
the_contentのフィルターフックを用いて記事の本文を取得し、正規表現でURLを取得してリンクを置換することが可能です。
リンククリック回数を計測するためにパラメータを付与したり、予め用意しておいた短縮URLに置換するということもできるでしょう。
WordPressのカスタマイズは難しい
アクションフックフィルターフックを使えば WordPress をカスタマイズできるということはわかっても、実際にやりたいことができると分かりません。
やりたい処理を実現しようと思うとプログラミングスキルが必要であるため、やり方はわかってもやりたいことができないという初心者やWeb担当者の方も多いでしょう。
そういうときはWordPressのお医者さんまでご相談ください。WordPressのお医者さんはWordPress高速化・機能追加・セキュリティ対策などのWordPressカスタマイズを得意としており、WordPressで困っていることをサポートしてあげられます。
相談は無料ですので、WordPressで困っていることがありましたら、まずは一度ご相談ください。