今回は、WordPressのfunctions.phpでアクションフック(add action)やフィルターフック(add filter)を利用する場合のフックの利用方法について基本的なポイントをお伝えいたします。
functions.phpの中に記述されているWordPress関数として、add_actionやadd_filterというものがあります。これはWordPressのプラグインAPI という仕組みを利用したもので、こうしたアクションフックやフィルターフックを利用すると、WordPressの機能をたくさん追加したり制御したりすることができます。
- add_action
- add_filter
「WordPressテーマのfunctions.phpを編集してカスタマイズする」でお伝えしましたとおり、WordPressをカスタマイズする場合、WordPressテーマのfunctions.phpを編集してカスタマイズを実装することがよくあります。
functions.phpの中でこうした様々な関数を用いてWordPressに特殊な機能を実装することができるのですが、これらはフックと呼ばれることがあります。add_actionを用いるものは、アクションフック、add_filterを用いるものはフィルターフックと呼ばれます。
WordPressにおけるフックとは?

WordPressにおけるフックとは、いわば、ある条件に合致したときに何かを実行するという至ってシンプルなものです。
このフックには、加えるのか、制限するのかといった種類によって、アクションフックとフィルターフックなどの分類があります。
どうしてこうした「フック」を利用するのかというと、このフックはWordPressを構成するWordPress本体、WordPressテーマ、WordPressプラグインの全てに適用できるため、それぞれがバージョンアップした場合にでも、カスタマイズした内容が上書き無効にならないという利点があるからです。
WordPressテーマ更新に注意

なお、フックはWordPressテーマの「functions.php」に記述しますので、万が一WordPressテーマ更新においてfunctions.phpが新しいものになっていた場合で、WordPressテーマを更新してしまった場合は全てのカスタマイズが無効になります(一般的にはfunctions.phpが上書きされることはめったにありませんが、テーマの大幅なメジャーアップデートがあった場合は要注意です)。
安全性を考えるなら子テーマ内のfunctions.phpにフックを記述する
こうしたことを避けるためには、WordPressテーマのカスタマイズにおいて、子テーマを利用して、子テーマ内のfunctions.phpにフックを記述すると解決することができます。
子テーマを利用してWordPressサイトをカスタマイズするメリット
こうしてWordPressテーマ内のfunctions.phpにadd_actionやadd_filterを利用してカスタマイズ項目を残しておくと、テーマファイルを上書きしない限り、WordPress本体やテーマ、各種WordPressプラグインが吐き出すソースに機能の追加や制限を加える事ができます。
アクションフック

WordPressをカスタマイズする際、アクションフックを利用する場合には基本的に「add_action」などを用います。
このアクションフックは、特定条件の出来事が起こった場合に加える動作を指定するといったイメージです。
add_action

functions.phpにadd_actionによってアクションフックを記述しておくと、特定の条件に合致した場合に加えられるソースコードが、WordPress本体やプラグインの更新にかかわらず吐き出されるようになります。
フィルターフック

WordPressをカスタマイズする際、フィルターフックを利用する場合には基本的に「add_filter」 などを用います。
このフィルターフックは、特定条件の出来事が起こった場合に特定の動作を除外したり「ファイルを呼び出さない」といった指定するイメージです。
add_filter

functions.phpにadd_filterによってフィルターフックを記述しておくと、特定の条件に合致した場合に制限(除外)されるソースコードを指定することができます。こちらもWordPress本体やプラグインの更新にかかわらず除外されるようにになります。
フィルターフックを使うシーン

add_filterによってフィルターフックを使うシーンの代表例は、WordPressプラグインファイルが吐き出すCSSなどをフィルタリングするときです。
プラグインファイルの中にもCSSがあり、WordPressサイトの中に吐き出されるようになりますが、場合によっては、既存のWordPressテーマファイル内のCSSと競合し、WordPressサイト全体のレイアウトやWebデザインに影響をあたえることがあります。
プラグインが吐き出すCSSファイルを制御するためにフィルターフックを利用する
シンプルなデザインの場合は、ありがたいこともあるかもしれないWordPressプラグインによるCSSの吐き出しですが、ありがた迷惑なことも多いため、こうしたプラグインが吐き出すCSSファイルを制御するためにフィルターフックがよく利用されます。
フックの実行順序とライフサイクルを完全に掌握する
多くの方が「なんとなく動くから」という理由で init フックや wp_head フックを使用しています。しかし、Webエンジニアとして重要なのは、WordPressがリクエストを受けてからHTMLを生成して終了するまでの「ライフサイクル(生命周期)」を正確にイメージできることです。
フックは適当な場所に書いても動くことがありますが、適切なタイミングを選ばなければ、予期せぬバグやパフォーマンス低下の原因になります。
ロードシーケンスの理解・initとwp_loadedの違い
例えば、初期化処理によく使われる init フックですが、これよりも前に plugins_loaded や setup_theme が実行されていることを意識する必要があります。
プラグインの設定を上書きしたい場合、相手のプラグインが plugins_loaded で読み込まれた後に、自分の処理を実行しなければなりません。また、init の段階ではまだユーザーの認証情報(ログインしているかどうか)が確定していない場合があります。
ユーザー情報を用いた処理を行いたい場合は、init ではなく、もう少し後の wp や、画面出力直前の template_redirect を使うのが定石です。このように「どの情報がどの時点で利用可能になるか」というタイムラインを意識することが、バグのない堅牢なコードへの第一歩です。
add_actionとadd_filterの第3引数・プライオリティの魔術
add_action や add_filter を使う際、第1引数(フック名)と第2引数(関数名)だけで満足してはいないでしょうか。プロフェッショナルな開発において最も戦略的に利用するのが、第3引数の「プライオリティ(優先順位)」です。
デフォルト値は「10」ですが、これを操作することで、プラグインの挙動を制御したり、HTMLの出力順序を自在に操ったりすることが可能になります。
プラグインの干渉を回避する「遅延実行」戦略
有名なSEOプラグインやEC系プラグインは、多くのフックをデフォルトの優先度(10)などで登録しています。これらのプラグインが出力するmetaタグや機能を上書き、あるいは無効化したい場合、自分の関数を優先度「10」で登録しても、読み込み順によっては先にプラグインの処理が走ってしまい、効果がないことがあります。
このような場合、あえて優先度を「9999」などの大きな数字に設定し、すべての処理が終わった「最後」に自分の処理を割り込ませるテクニックを使います。
// 他のプラグインがタイトルを書き換えた後に、さらに強制的に書き換える
add_filter( 'the_title', 'my_force_title_change', 9999 );
逆に、他の処理が走る前にデータの準備をしておきたい場合は、「1」や「5」といった若い数字を指定します。この数字のコントロールこそが、複雑にプラグインが絡み合うWordPress環境における交通整理の役割を果たします。
第4引数の活用・引数の数を制御してデータを受け渡す
意外と見落とされがちなのが、add_filter の第4引数である「受け入れる引数の数($accepted_args)」です。フィルターフックの中には、変更対象のデータだけでなく、その処理に必要な「コンテキスト情報(付随情報)」を2つ目、3つ目の引数として渡してくれるものがあります。
しかし、add_filter の第4引数で明示的に「いくつの引数を受け取るか」を指定しない限り、関数側には最初の1つしか渡ってきません。
具体例・content_save_preフックでの活用
例えば、記事がデータベースに保存される直前に呼ばれる content_save_pre というフィルターがあります。これを使って記事の内容を検証したい場合、記事本文だけでなく、その記事のIDや投稿タイプなどの情報も欲しくなります。
// 第4引数に「2」を指定することで、$contentだけでなく$post_idも受け取れる
add_filter( 'content_save_pre', 'my_custom_content_filter', 10, 2 );
function my_custom_content_filter( $content, $post_id ) {
// $post_id を使って、特定の記事IDの場合だけ処理を変えるなどが可能になる
if ( 123 === $post_id ) {
// ...
}
return $content;
}
このように、WordPressコアが提供している「隠れた引数」を最大限に引き出すことで、グローバル変数を参照するような不安定なコードを書かずに、スマートなロジックを構築することができます。
無名関数(クロージャ)の利用とそのリスク管理
PHPのバージョンアップに伴い、WordPressの開発現場でも create_function は非推奨となり、代わりに無名関数(クロージャ)が使われるようになりました。関数名をいちいち決めなくて良いため、コードがスッキリするように見えます。
// 無名関数の例
add_action( 'init', function() {
register_post_type( 'book', /*...*/ );
});
一見便利に見えますが、トッププロの視点では、安易な無名関数の多用には慎重になります。なぜなら、無名関数は「後からフックを解除(remove_action)できない」という重大な欠点があるからです。
拡張性とメンテナンス性を考慮した名前付き関数の推奨
将来、子テーマでカスタマイズを行ったり、別の開発者が保守を行ったりする際、ある機能だけを無効化したい場面が出てきます。その時、関数名が付いていれば remove_action( ‘init’, ‘function_name’ ); で簡単に無効化できますが、無名関数で書かれていると、フック全体を触らなければならず、影響範囲が大きくなってしまいます。
事業用ホームページのように長く運用され、改修が繰り返されるプロジェクトにおいては、多少手間であっても「名前付き関数」として定義するか、クラス構造を用いてメソッドを指定する方法を採用し、将来の拡張性を担保するのが責任あるエンジニアの姿勢です。
フィルターフックを用いたセキュリティ対策とサニタイズ
フックは単に機能を追加するだけでなく、セキュリティを高めるためにも利用されます。ユーザーが入力したデータや、外部APIから取得したデータをデータベースに保存、あるいは画面に表示する際、フィルターフックはこの「関所」として機能します。
特にカスタムフィールドや検索フォームなど、ユーザーからの入力を受け付ける箇所では、必ず適切なサニタイズ(無害化)処理をフィルターとして挟む必要があります。
pre_kses などの内部フィルターの理解
WordPressには pre_kses という強力なフィルターがあり、投稿本文に含まれる危険なタグ(scriptタグやiframeタグなど)を、ユーザーの権限に応じて自動的に削除してくれます。
独自の入力フォームを作成する場合も、自前で str_replace などで処理するのではなく、WordPress標準のサニタイズ関数(sanitize_text_field, wp_kses_post など)をフィルターとして適用することで、コアレベルのセキュリティ強度を維持することができます。
// カスタム入力欄の保存前にサニタイズ処理をフックさせる
add_filter( 'update_post_metadata', 'my_sanitize_meta', 10, 5 );
このように、データの入り口と出口にフックで監視役を置く設計こそが、改ざんや攻撃に強いサイト構築の要となります。
独自フック(do_action)の定義・テーマ開発者の作法
ここまではWordPressに標準で備わっているフックの使い方でしたが、さらに一歩進んで、自分が作成するテーマやプラグインの中に「独自のフック」を設置するというテクニックがあります。これができるようになると、Web制作のプロとして頭一つ抜けた存在になれます。
例えば、header.php の中で、ロゴの下あたりに do_action( ‘my_theme_after_logo’ ); という記述をしておきます。
将来の拡張を見越した「フックの種まき」
このように独自フックを設置しておくと、将来「ロゴの下にキャンペーンバナーを出したい」という要望が出た際、テンプレートファイルを直接編集するのではなく、functions.php から add_action( ‘my_theme_after_logo’, ‘display_banner’ ); と書くだけで対応が可能になります。
これにより、テンプレートファイルを汚さずに機能追加が可能になり、デザインとロジックを分離することができます。特にクライアントに納品するテーマを作成する場合、主要なセクションの間にこのような「フックポイント」を用意しておくことは、将来の自分、あるいは引き継ぐ開発者への最大の配慮となります。
デバッグ手法・どのフックが動いているかを知る
フックを使いこなす上で避けて通れないのが、「今、どのフックがどのような順序で実行されているか」が見えないという問題です。これを可視化するために、プロはデバッグツールを活用します。
「Query Monitor」というプラグインは非常に優秀で、現在のページを表示するために実行されたすべてのアクションフックとフィルターフックを一覧で確認することができます。また、特定のフックに登録されている関数名や、その優先度、さらにはどのファイルで定義されているかまで特定できます。
「期待通りに動かない」と悩んだ時、闇雲にコードを書き換えるのではなく、まずツールを使って現状のフックの状態を診断する。このトラブルシューティングのプロセスを確立することが重要です。
フックはWordPressとの対話手段
functions.php におけるアクションフックとフィルターフックの記述は、単なる命令文ではありません。それは「WordPressという巨大なシステムに対し、適切なタイミングで、適切な礼儀(引数や優先度)を持って対話し、協力を依頼する」プロセスです。
実行順序(ライフサイクル)を意識する 優先度(プライオリティ)で競合を避ける 無名関数を避け、拡張性を残す 独自フックで未来の変更に備える
これらの視点を持ってコーディングを行うことで、あなたの作成するサイトは、見た目が綺麗なだけでなく、裏側の構造まで美しく、堅牢なシステムへと昇華します。ぜひ、一つ上の視座で functions.php と向き合ってみてください。
アクションフックやフィルターフックを利用してWordPress本体やプラグインを制御

これらアクションフックやフィルターフックを利用してWordPress本体やプラグインを制御することで、WordPressの機能を大幅にカスタマイズすることができます。
WordPress本体やWordPressプラグインファイルを直接編集してもよいのですが、バージョンアップによるカスタマイズの無効化リスクを避けるためにも、なるべくこうしたfunctions.phpでのアクションフックやフィルターフックを利用したほうが安全です。
ただし、functions.phpを操作しますので、内部サーバーエラーには注意してください。
(初回投稿日 2015年11月3日)
WordPressカスタマイズ・修正
ホームページ制作 京都のWeb制作会社ファンフェアファンファーレでは、WordPressで制作されたウェブサイト・ホームページのカスタマイズサービスとして、WordPress(ワードプレス)のテーマ(テンプレート)やプラグインのカスタマイズサービスを提供しております。
WordPressカスタマイズの他、WordPressに関する様々な機能の実装や調整、編集はもちろん、各種エラーの修正・復旧に対応しております。
復旧・復元・エラー修正
ホームページ制作 京都のWeb制作会社ファンフェアファンファーレでは、WordPress(ワードプレス)で制作されたウェブサイト・ホームページの復旧(復元)、エラー修正サービスを提供しております。弊社制作のWordPress(ワードプレス)サイトの復旧、エラー修正も承っておりますが、自社制作・運営、他社制作・管理のWordPressサイトのエラー復旧(復元)・修正にも対応可能です。
WordPressの保守やセキュリティについては、基本的にはバックアップによる保守管理で十分だと考えています。トラブル時のWordPressの復旧のためのWordPressの保守やセキュリティ、バックアップと復元について。
WordPressでのホームページ制作(WordPressサイト制作)
ホームページ制作 京都 ファンフェアファンファーレでは、ホームページ制作にあたり、WordPressでのホームページ制作(WordPressサイト制作)を推進させていただいております。
企業のWebマーケティングを加速するWordPressでのホームページ制作(WordPressサイト制作)ならお任せください!新規WordPressサイト制作はもちろん、htmlサイトからのホームページリニューアル、WordPressサイトのリニューアルにも対応しています。









