has_action() の使い方|説明・引数・注意点

説明

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

コメント

タイトルとURLをコピーしました