【WordPress】フィルターフックとは?|add_filterの優先度・remove_filterまで解説

WordPressのフィルターフックは、データをカスタマイズするための強力なツールです。この記事では、フィルターフックの基本的な使い方から、優先度による実行順序の制御、フィルターの解除方法まで解説します。

この記事でわかること

  • add_filter() でのフィルター関数の登録方法
  • 優先度(第3引数)で実行順序を制御する方法
  • remove_filter() でフィルターを解除する方法
スポンサーリンク

フィルターフックの概要

フィルターフックは、WordPressの内部でデータが処理される際に、そのデータを変更するための仕組みです。特定のデータを出力する前に、フィルター関数を使ってそのデータをカスタマイズすることができます。これにより、テーマやプラグインの機能を柔軟に調整することが可能です。

フックの登録

フィルターフックを使用するには、add_filter() 関数を使って、特定のフィルターフックにカスタム関数を登録します。例えば、投稿タイトルを変更する場合のコードは以下のようになります。

functions.php:the_titleフィルターに関数を登録
add_filter( 'the_title', 'my_custom_title_filter' );

このコードでは、the_title フィルターに対してmy_custom_title_filter というカスタム関数を追加しています。

フィルター関数の作成

フィルター関数は、フィルターフックに渡されるデータを変更し、変更後のデータを必ず返す関数です。以下の例では、タイトルの前に「カスタムタイトル: 」という文字列を追加しています。

functions.php:タイトルの前に文字列を追加するフィルター関数
function my_custom_title_filter( $title ) {
    return 'カスタムタイトル: ' . $title;
}

この関数は、the_title フィルターフックを通じて呼び出され、タイトルがカスタマイズされます。

優先度(第3引数)で実行順序を制御する

同じフィルターフックに複数の関数が登録されている場合、add_filter()第3引数(優先度)で実行順序を制御できます。数値が小さいほど先に実行され、既定値は 10 です。

functions.php:優先度を指定して実行順序を制御
// 既定より早く実行したい場合(数値を小さくする)
add_filter( 'the_title', 'my_custom_title_filter', 5 );

// 他のフィルターの後に実行したい場合(数値を大きくする)
add_filter( 'the_title', 'my_custom_title_filter_late', 20 );
複数のプラグイン・テーマが同じフックを使う場合に重要
例えば、あるプラグインがタイトルに絵文字を付け、別のフィルターがタイトルの前後の空白を削除する場合、実行順序次第で結果が変わります。意図した順序で処理されない場合は、優先度の値を調整して確認してください。

remove_filterでフィルターを解除する

他のプラグインやテーマ、あるいは自分で以前登録したフィルターを解除したい場合は remove_filter() を使います。登録時と全く同じ関数名・優先度を指定する必要があります。

functions.php:登録済みのフィルターを解除
remove_filter( 'the_title', 'my_custom_title_filter', 5 ); // 優先度も登録時と一致させる
優先度を省略すると解除できないことがある
remove_filter() の第3引数(優先度)を省略すると既定値の10とみなされます。登録時に優先度10以外の値を指定していた場合、優先度を省略・間違えると解除に失敗します(何も起こらず、フィルターが残り続けます)。登録側のコードと同じ優先度を必ず指定してください。クラスのメソッドとして登録したフィルターを解除する場合は、array( $object, 'method_name' ) の形も登録時と一致させる必要があります。

フィルターフックの適用タイミング

フィルターフックは、テーマやプラグインの中で apply_filters() が呼ばれた瞬間に適用されます。例えば the_title() というテンプレートタグの内部で apply_filters('the_title', $title) が呼ばれており、このタイミングで登録済みのフィルター関数が実行されます。

よく使われるフィルターフック

  • the_title:投稿やページのタイトルを変更する際に使用されます。
  • the_content:投稿やページのコンテンツを変更する際に使用されます。
  • excerpt_length:抜粋の長さを調整する際に使用されます。
  • widget_title:ウィジェットのタイトルをカスタマイズする際に使用されます。

関連するフックの実践例

アクションフックの代表格であるpre_get_postsを使った実践的な絞り込み検索の実装例は絞り込み検索機能を実装する方法(セレクトボックス・チェックボックス・pre_get_posts)で解説しています。

よくある質問(FAQ)

QWordPressのフィルターフックとアクションフックの違いは何ですか?
Aフィルターフックはデータを受け取り、変更して返す仕組みです(add_filter)。アクションフックは特定のタイミングで処理を実行する仕組みです(add_action)。フィルターは値を返し、アクションは返しません。
Qapply_filters()でカスタムフィルターポイントを作るには?
Aapply_filters(‘my_custom_filter’, $value)と書くと、その値に対してadd_filter(‘my_custom_filter’, ‘my_callback’)で登録した関数が適用されます。プラグイン開発で拡張ポイントを提供する際に使います。
Qフィルターフックで複数の引数を渡すには?
Aapply_filters(‘hook_name’, $value, $arg1, $arg2)のように追加引数を渡し、add_filter(‘hook_name’, ‘callback’, 10, 3)で受け取る引数数(3)を指定します。第3引数(優先度)を省略せずに書く癖をつけると、後から引数を追加する際に混乱しません。

まとめ

  • 登録add_filter(フック名, 関数名, 優先度, 引数の数)
  • 優先度:数値が小さいほど先に実行される(既定は10)
  • 解除remove_filter()は登録時と同じ優先度を指定する

フィルターフックは、WordPressのデータ処理をカスタマイズするための強力な機能です。優先度と解除の仕組みまで理解しておくと、他のプラグイン・テーマとの競合にも対応しやすくなります。