WordPressの アクション (Action) と フィルター (Filter) は、WordPressの機能をカスタマイズするための仕組みです。これらをフック(Hook)と総称します。
WordPressのフックとは
アクション (Action)
アクションは、WordPressの特定の処理が実行されたときに、独自のコードを追加するための仕組みです。主に何かを「追加」したり、「実行」したりする目的で使われます。
アクションは
・フック: add_action() 関数をで特定のイベントに独自コールバック関数を紐付け
・実行: do_action()で紐付けられた関数が実行される
となっています。
具体例
テーマのフッターに著作権情報を追加する wp_footer を例に撮ります。
これはフッターが読み込まれる直前に実行されるアクションフックです。
wp_headerへの追加
function add_my_copyright_to_footer() {
echo '© ' . date('Y') . ' My Website. All Rights Reserved.
';
}
add_action('wp_footer', 'add_my_copyright_to_footer');
‘wp-footer’を処理する関数は wp-includes\general-template.php にあります。
‘wp-footer’の実行
function get_footer( $name = null, $args = array() ) {
:
do_action( 'get_footer', $name, $args );
:
}
よく使うフック
| フック名 | 実行タイミング・用途 | 引数 |
|---|---|---|
get_header |
ヘッダー(header.php)が読み込まれる直前。特定のページで読み込むヘッダーを切り替える際などに使用。 | $name, $args |
get_footer |
フッター(footer.php)が読み込まれる直前。 | $name, $args |
get_sidebar |
サイドバー(sidebar.php)が読み込まれる直前。 | $name, $args |
get_template_part_{$slug} |
特定のテンプレートパーツ(例:content-single.phpなど)が読み込まれる際の動的フック。 | $slug, $name, $args |
get_template_part |
テンプレートパーツが読み込まれる際の汎用フック。 | $slug, $name, $templates, $args |
pre_get_search_form |
検索フォームが表示される直前。 | $args |
wp_meta |
メタ・ウィジェット(ログイン・ログアウト等のリンク)の中に出力される。 | なし |
wp_head |
HTMLの <head> タグ内。CSS、JS、メタタグの挿入に使用される最重要フックの一つ。 | なし |
wp_footer |
HTMLの </body> 終了タグ直前。スクリプトの読み込みやフッター要素の追加に使用。 | なし |
wp_body_open |
<body> タグが開始された直後。アクセス解析タグの挿入等によく使われる。 | なし |
wp_enqueue_code_editor |
管理画面などでコードエディター(CodeMirror)を読み込む際の設定変更用。 | $settings |
admin_menu |
管理画面のメインメニュー構造が作成される際。プラグイン独自の設定メニューを追加するのに必須。 | なし(空文字列) |
独自のアクションの追加
あなたのテーマやプラグインの中のどこかで
do_action( ‘アクション名’, $result );
と書くだけで追加される。
独自フックを作る目的
拡張性(プラグインのプラグイン化): 有名なプラグイン(WooCommerceなど)には数千の独自フックがあります。これにより、他の開発者が「支払い完了時」などのタイミングで自由に機能を拡張できるようになります。コードの整理: メインの処理の流れを汚さずに、後付けで「メール送信」や「ログ保存」などのサブ処理を切り離して管理できます。
テーマからの制御: プラグインが表示する内容の「前」や「後」に、テーマ側でバナーや広告を差し込めるようにしてあげると親切です。
フィルター (Filter)
使い方フック: add_filter() 関数を使って、特定のデータに独自の関数を紐付けます。
実行: apply_filters() でそのデータを処理する直前に、紐付けられた関数にデータが渡されます。
紐付けられた関数では渡されたデータを加工して返します。
主なフィルター
| フック名 | 実行タイミング・用途 | 引数 |
|---|---|---|
the_content |
データベースから取得した投稿本文を画面に出力する直前。広告の挿入や文字列の置換に使用。 | $content |
the_title |
投稿やページのタイトルを出力する直前。特定の条件でタイトルにプレフィックスを付ける際などに使用。 | $title, $id |
excerpt_length |
自動生成される抜粋(excerpt)の長さを決定する際。表示する文字数を数値で返す。 | $number |
body_class |
bodyタグに付与されるクラス名の配列を生成する際。特定のページに独自のCSSクラスを追加するのに便利。 | $classes, $class |
wp_calculate_image_srcset |
レスポンシブイメージ用のsrcset属性を生成する際。画像URLやサイズのリストを調整できる。 | $sources, $size_array, $image_src, $image_meta, $attachment_id |
upload_mimes |
ファイルをアップロードする際の許可されているMIMEタイプを定義する際。SVGなどの許可されていない形式を追加可能。 | $mimes, $user |
widget_text |
テキストウィジェットの内容を表示する直前。ウィジェット内でショートコードを実行させたい場合など。 | $text, $instance, $widget |
script_loader_tag |
wp_enqueue_scriptで登録されたscriptタグを出力する際。asyncやdefer属性を付与する場合に使用。 | $tag, $handle, $src |
具体例 投稿のタイトルに「【New!】」という文字列を追加する例です。the_title は、投稿のタイトルが表示される直前に実行されるフィルターフックです。
wp_headerへの追加
function add_new_prefix_to_title($title) {
if (in_the_loop() && is_main_query()) {
$title = '【New!】' . $title;
}
return $title; // 変更したデータを必ず返す
}
add_filter('the_title', 'add_new_prefix_to_title');