フックは、WordPressの決まった場面に自分の処理を差し込む仕組みです。
テーマのファイルを書き換えずに機能を足せるので、更新で消えません。
ただし、種類が2,000以上あります。
全部覚える必要はありません。
実際に使うのは20個ほどで、大事なのは「どの順番で走るか」です。
この記事では、実行される順番と、場面別によく使うものをまとめました。
アクションフックとフィルターフックの違い
先にここを押さえておくと、迷いません。
| アクションフック | フィルターフック | |
|---|---|---|
| 役割 | その場面で処理を実行する | 値を受け取って、書き換えて返す |
| 登録 | add_action() | add_filter() |
| 戻り値 | 要らない | 必ず返す。返さないと値が消える |
| 例 | 読み込みが終わったらCSSを足す | 記事の本文の末尾に一文を足す |
「何かをする」ならアクション、「何かを変える」ならフィルターです。
// アクション:処理を走らせるだけ。返さない
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style( 'my-style', get_stylesheet_uri() );
} );
// フィルター:受け取って、変えて、必ず返す
add_filter( 'the_content', function ( $content ) {
return $content . '<p>最後まで読んでいただきありがとうございました。</p>';
} );フィルターで return を忘れると、本文がまるごと消えます。
真っ白になったら、まずここを疑ってください。
実行される順番
順番を外すと、動かない・エラーになる、のどちらかです。
代表的なものを、走る順に並べます。
| 順 | フック | この時点でできること |
|---|---|---|
| 1 | muplugins_loaded | 必須プラグインだけ読み込み済み。まだ何も使えない |
| 2 | plugins_loaded | プラグインが揃う。テーマはまだ |
| 3 | after_setup_theme | テーマの機能を宣言する場所(アイキャッチ対応など) |
| 4 | init | いちばん使う。投稿タイプ・タクソノミー・セッションの登録 |
| 5 | wp_loaded | 全部の読み込みが終わった直後 |
| 6 | template_redirect | どのテンプレートを使うか決まる直前。リダイレクトはここ |
| 7 | wp_enqueue_scripts | CSSとJSを読み込む場所。条件分岐が使える |
| 8 | wp_head | <head> の中に出力する |
| 9 | wp_body_open | <body> の直後。計測タグはここ |
| 10 | wp_footer | ページの末尾。重いJSはここへ |
迷ったら init に書く、で大きく外しません。
ただし init は管理画面でも Ajax でも走ります。
フロントだけで動かしたいときは、条件を添えてください。
add_action( 'init', function () {
if ( is_admin() ) {
return; // 管理画面では何もしない
}
// ここにフロント向けの処理
} );場面別によく使うフック
CSSとJSを足す
| フック | 使いどころ |
|---|---|
wp_enqueue_scripts | フロント。名前はscriptsだがCSSもここ |
admin_enqueue_scripts | 管理画面 |
enqueue_block_editor_assets | ブロックエディタの中だけ |
login_enqueue_scripts | ログイン画面 |
wp_head に直接 <style> を書くより、wp_enqueue_scripts を使ってください。
読み込み順とキャッシュをWordPressが面倒を見てくれます。
記事の保存に合わせて動かす
| フック | いつ走るか |
|---|---|
save_post | 投稿の保存時。自動保存とリビジョンでも走るので除外が要る |
save_post_{投稿タイプ} | その投稿タイプだけ。こちらのほうが安全 |
transition_post_status | 公開・下書きなど状態が変わったとき |
publish_post | 公開になった瞬間 |
before_delete_post | 完全に削除される直前 |
save_post は、そのまま書くと保存のたびに何度も走ります。
add_action( 'save_post_post', function ( $post_id, $post, $update ) {
// 自動保存とリビジョンでは動かさない
if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
return;
}
// 権限の確認も入れる
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
// ここに処理
}, 10, 3 );管理画面をいじる
| フック | 使いどころ |
|---|---|
admin_menu | メニューの追加・削除 |
admin_init | 管理画面の初期化。設定の登録 |
admin_notices | 管理画面に通知を出す |
add_meta_boxes | 編集画面に入力欄を足す |
admin_bar_menu | 上部のツールバーをいじる |
リダイレクトと表示の分岐
| フック | 使いどころ |
|---|---|
template_redirect | 条件を見て別のURLへ飛ばす。出力前なので安全 |
pre_get_posts | 表示する記事の絞り込みを変える。フィルターではなくアクション |
wp | クエリが決まった直後 |
pre_get_posts は名前からフィルターに見えますが、アクションです。
渡されたクエリのオブジェクトを直接書き換えます。
add_action( 'pre_get_posts', function ( $query ) {
// 管理画面とサブクエリは触らない
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_category() ) {
$query->set( 'posts_per_page', 20 );
}
} );優先度と引数の数
add_action() の3つめと4つめが、つまずきどころです。
add_action( 'フック名', '関数名', 優先度, 受け取る引数の数 );| 引数 | 既定 | 意味 |
|---|---|---|
| 優先度 | 10 | 小さいほど先に走る。あとから上書きしたいなら大きくする |
| 引数の数 | 1 | 2つ以上受け取るなら必ず書く。書かないと2つめ以降が渡らない |
「引数がnullになる」の原因は、ほぼこの4つめの書き忘れです。
他のプラグインの処理より後に走らせたいときは、優先度を大きくします。
// 他のプラグインが 10 で書き換えたあとに、こちらで上書きする
add_action( 'wp_enqueue_scripts', 'my_override', 99 );フックを探すときは
全部を覚えるより、探し方を知っておくほうが早いです。
- 公式のリファレンスで名前を引く(
developer.wordpress.org/reference/hooks/) - テーマやプラグインのファイルを
do_actionで検索する。そこが差し込める場所 - 使っているテーマの一覧記事を見る(下にまとめています)
自作のフックを作るときは do_action() を置くだけです。
// 自分のテーマやプラグインの中に置く
do_action( 'my_theme_before_footer', $args );
// 使う側
add_action( 'my_theme_before_footer', function ( $args ) {
echo '<p>フッターの直前です</p>';
} );テーマ別のフック一覧は、それぞれまとめています。



SWELLでフックを使ってコンテンツを差し込む場所は、こちらです。

まとめ
- 「何かをする」はアクション、「何かを変える」はフィルター
- フィルターは
returnを忘れない。忘れると値が消える - 順番は after_setup_theme → init → template_redirect → wp_enqueue_scripts → wp_head の流れ
- 迷ったら
init。ただし管理画面でも走るので条件を添える save_postは自動保存とリビジョンを除外する- 引数を2つ以上受け取るなら、4つめの数を必ず書く
この記事は2026年9月16日時点の公式リファレンスで確認しました。
公式の一覧はこちらです。
WordPressのカスタマイズ全体は、こちらにまとめています。




