説明
has_action() は、指定したアクションフックにコールバックが登録されているかを調べる関数です。
基本構文
has_action( string $hook_name, callable|string|array|false $callback = false ): bool|int
引数
$hook_name:フック名$callback:確認するコールバック。省略するとフック全体を対象にする
戻り値
コールバック省略時は登録の有無(bool)。指定時は優先度(int)、未登録なら false。
使い方(サンプル)
if ( has_action( 'wp_head', 'wp_generator' ) ) {
remove_action( 'wp_head', 'wp_generator' );
}
注意点
- 優先度が
0の場合はfalseと区別するため、false !== has_action(...)で判定します。 - フックに登録できるのは、その時点までに読み込まれた処理だけです。
実務での使いどころ
- 特定のアクションに、処理が、登録されているかを確認するとき。
- 登録されている、優先度を取得するとき。
よくあるミスと対処
$callbackを指定したとき、戻り値は、優先度(整数)。優先度が0のとき、if ( has_action( ... ) )は、偽になる。false !==で比べる。- フックの登録前に呼び、
falseになる。 - コールバックの指定が、登録時と違う(クラスのメソッドは、同じオブジェクトで指定する)。
NG例
if ( has_action( 'init', 'my_func' ) ) { // 優先度が 0 だと、偽になる
// ...
}
OK例
if ( false !== has_action( 'init', 'my_func' ) ) {
// 登録されている
}
使い分け早見表
| 関数 | 役割 |
|---|---|
has_action() |
登録されているか確認する |
did_action() |
何回、実行されたか確認する |
doing_action() |
いま、実行中か確認する |
関連項目
add_action()、remove_action()、did_action()
公式リファレンス:has_action() | Function | WordPress Developer Resources

コメント