結論
独自フックは、事前の登録なしに do_action()(アクション)または apply_filters()(フィルター)を書くだけで作れます。使い分けは次のとおりです。
- 出力や処理を差し込ませたい →
do_action( 'myplugin_before_card', $id ) - 値を書き換えさせたい →
$html = apply_filters( 'myplugin_card_html', $html, $id )
フック名には、テーマやプラグイン固有の接頭辞を付けます(公式リファレンスでも、プラグインやテーマの slug を前に付ける命名が推奨されています)。引数は、使う側が判断するための材料(投稿IDなど)を渡します。
原因・仕組み
do_action() と apply_filters() は、指定した名前に登録されたコールバックを順に実行するだけの関数です。コールバックが1つもなくてもエラーにならず、apply_filters() は渡した値をそのまま返します。この「何も登録されていなければ素通り」という性質が、拡張ポイントを後から安全に増やせる理由です。
違いは戻り値の扱いです。アクションは戻り値を使わない(do_action は何も返さない)のに対し、フィルターは各コールバックの戻り値が次へ渡され、最終的な値が apply_filters() の戻り値になります。
手順(サンプルコード)
1. 提供側:フックを置く
function mytheme_render_card( $post_id, $title ) {
do_action( 'mytheme_before_card', $post_id, $title );
$html = '<div class="card">' . esc_html( $title ) . '</div>';
$html = apply_filters( 'mytheme_card_html', $html, $post_id );
echo wp_kses_post( $html ); // フィルターで差し替えられたHTMLも、出力直前に許可タグだけに絞る
do_action( 'mytheme_after_card', $post_id );
}
デフォルト値を返す設定値も、フィルターで作れます。
function mytheme_per_page() {
return (int) apply_filters( 'mytheme_per_page', 10 );
}
2. 利用側:フックに処理を登録する
add_action( 'mytheme_before_card', function ( $id, $title ) {
echo '[before id=' . (int) $id . ']';
}, 10, 2 ); // 引数を2つ受け取るので、第4引数に2
add_filter( 'mytheme_card_html', function ( $html, $id ) {
return str_replace( 'card', 'card card--' . (int) $id, $html );
}, 10, 2 );
3. 配列・参照を渡す
配列を1つ渡すのは通常の do_action( 'x', $array ) で足ります。参照渡しにしたい場合は do_action_ref_array( 'x', array( &$obj ) ) を使います。なお公式リファレンスには、「中身が1つのオブジェクトだけの配列」を渡すと、コールバックにはその配列ではなくオブジェクトが渡る、という注意書きがあります。
動作確認(検証環境と結果)
WordPress 7.1.2(ja)、PHP 8.2.12 の CLI 環境で実行しました。
- 上記の手順1・2のコードのまま
mytheme_render_card( 7, 'Hello <b>' )を実行した出力:[before id=7]<div class="card card--7">Hello <b></div>。タイトルはエスケープされ、フィルターでクラスが追加された(執筆時の検証では、mytheme_after_cardに[after]を出すコールバックを追加し、カードの後ろに出力されることも確認)。 - 引数を1つしか受け取らない登録(
accepted_args省略)では、第1引数だけが渡された。 mytheme_per_page()はデフォルトの10、フィルターが'25'を返すと(int)キャストによりint(25)。- 配列の引数は
array-arg: A1、参照渡しはref n=2になった。 has_actionはtrue、did_actionは1。
ログは testscreate-custom-hook-do-action-apply-filters.md にあります。「配列に入った単一オブジェクト」の挙動は、この環境では検証していません(公式の記載のみに基づきます)。
独自フックの作り方の注意点
- フィルターの戻り値は、
(int)などで型を整えてから使うと安全です。使う側が文字列を返すこともあるためです。 - フックに渡す値のエスケープは、出力する側で行う設計に統一します。フィルター後の HTML を
echoする場合は、wp_kses_post()などで通す判断を明示します。 - 一度公開したフック名・引数の順番は、変更すると他の人のコードが壊れます。引数は末尾に足すのが基本です。
- フック名は、小文字とアンダースコアで、接頭辞を付けます。
initのような汎用名は使いません。
独自フックの作り方でよくあるミス
apply_filters()の戻り値を受け取らず、結果が反映されない。- 利用側が
add_filter()の第4引数を指定せず、第2引数以降を受け取れない(add_filter() の使い方|説明・引数・注意点参照)。 - フック名に接頭辞を付けず、他のプラグインと衝突する。
- フィルターの結果を、エスケープせず出力して、脆弱性になる。
独自フックの作り方のチェックリスト
- フック名に、固有の接頭辞を付けたか
- アクションかフィルターか、目的で選んだか
- 渡す引数が、使う側の判断に十分か
- 戻り値の型を整えて使っているか
- 出力前のエスケープ方針を決めたか
独自フックの作り方のFAQ(よくある質問)
Q. フックを作ったことを、利用者にどう伝えますか?
A. ドキュメントに、フック名・引数・戻り値の型・使用例を書くのが一般的です。
Q. 条件によってフック名を変えられますか?
A. 可能です。コアにも {$taxonomy}_add_form のように動的な名前があります。ただし検索しづらくなるため、乱用は避けます。
Q. do_action の代わりに関数を直接呼んでもよいですか?
A. 利用者が差し込む必要がなければ、直接呼んで構いません。拡張点が必要な箇所だけにフックを置きます。
筆者の見解(独自フックの作り方)
フックは「あとで必要になるかも」で置くより、実際に自分のテーマで2か所以上から差し替えたくなってから置く方が、設計として健全だと考えます。公開した後で引数を変えられないため、最初の引数は少なく、IDなど変わりにくいものにするのが無難だと思います。
PR エックスサーバー
WordPressを、速く・止まらずに運営したい方へ
サーバー選びを間違えると、表示が遅い・サイトが止まるリスクがあります
こんなお悩みはありませんか?
- どのレンタルサーバーを選べばよいか分からない
- 表示が遅い・サイトが落ちるのが心配
- WordPressの設定やセキュリティに自信がない
サーバーは、あとから乗り換えると、データの移行やドメインの設定に手間がかかります。表示が遅い、突然止まるといったトラブルは、訪問者が離れる原因にもなります。最初に、稼働率の保証や実績を確認して選ぶのが安全です。
エックスサーバーなら、WordPressの運営に強いレンタルサーバーを、迷わず選べます。国内でWordPressを利用して運用されているサイトの集計(Dataprovider.com調べ、2025年6月)で、国内シェアNo.1と公式サイトに記載されています。
選ばれるポイント
- WordPressサイトの国内シェアNo.1。実績で選びたいときの安心材料(Dataprovider.com調べ、2025年6月)
- サイトが止まりにくい。月間稼働率99.99%以上を保証し、下回ると月額費用の一部を返金
- 攻撃に強い。WordPressを狙った攻撃の99%以上を未然に防ぐ機能(2024年9月15日〜11月15日の当社調べ)
- ドメイン代を節約できる。独自ドメインが永久無料(対象ドメイン・契約期間などの条件あり)
- テーマ選びも安心。人気テーマ「Cocoon」の開発・提供元が運営
- 10日間の無料お試しで、契約前に操作や表示の速さを確かめられる
10日間の無料お試しで、契約前に試せます
10日間無料でお試し
広告(アフィリエイト)を含みます。特長は2026年11月8日時点の公式サイトの記載で、数値・順位は各調査・調べの時点のものです。料金・条件は公式サイトでご確認ください。
独自フックの作り方の関連項目
- do_action() の使い方|説明・引数・注意点
- apply_filters() の使い方|説明・引数・注意点
- add_action() の使い方|説明・引数・注意点
- add_filter() の使い方|説明・引数・注意点
- has_action() の使い方|説明・引数・注意点
