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

説明

add_action() は、指定したアクションフックに、実行したい関数(コールバック)を登録する関数です。WordPressの処理の途中に独自の処理を差し込むときの基本になります。

基本構文

add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ): true

引数

  • $hook_name:フック名(例:wp_head、init)
  • $callback:実行する関数名・クロージャ・配列形式のメソッド
  • $priority:実行順。小さいほど先に実行(既定10)
  • $accepted_args:コールバックに渡す引数の数(既定1)

戻り値

常に true を返します。

使い方(サンプル)

function my_add_meta() {
	echo '<meta name="robots" content="noindex">';
}
add_action( 'wp_head', 'my_add_meta' );

注意点

  • フックが実行されるより前(functions.php の読み込み時など)に登録する必要があります。
  • コールバックに2つ以上の引数を渡したいときは $accepted_args を指定しないと受け取れません。
  • 関数名は他のプラグインと衝突しないよう、接頭辞を付けるかクラスのメソッドにします。
  • 登録した処理を外すには remove_action() を同じ優先度で呼びます。

実務での使いどころ

  • 既存の処理の途中に、自分の処理を差し込むとき(init や wp_enqueue_scripts など)。
  • 同じフックに複数の処理を登録し、優先度で実行順を決めるとき。
  • フックが渡す引数を使って処理するとき(save_post の投稿IDなど)。

よくあるミスと対処

  • フックが複数の引数を渡すのに、第4引数(受け取る引数の数)を指定していない。既定は1つのため、コールバックが2つ以上の引数を必須として宣言していると、PHP 7.1以降は致命的エラー(ArgumentCountError)になります。
  • フック名のスペルミス。エラーは出ず、ただ実行されないだけなので、気づきにくい不具合になります。
  • アクションのコールバックで、戻り値を返そうとしている。アクションの戻り値は使われません。値を加工して返したいときは add_filter() を使います。
  • 関数名が、他のプラグインやテーマと重複している。致命的エラーになるため、接頭辞を付けるか、無名関数を使います(ただし、無名関数は後から remove_action() で外しにくくなります)。

NG例

add_action( 'save_post', 'my_save' );
function my_save( $post_id, $post, $update ) {
	// 引数が足りず、エラーになる(PHP 7.1以降)
}

OK例

add_action( 'save_post', 'my_save', 10, 3 );
function my_save( $post_id, $post, $update ) {
	// 3つの引数を受け取れる
}

使い分け早見表

比べる点 add_action() add_filter()
目的 処理を差し込む 値を加工して返す
コールバックの戻り値 使われない 必須(加工した値を返す)
フックを実行する関数 do_action() apply_filters()

関連項目

do_action()、remove_action()、add_filter()、apply_filters()

公式リファレンス:add_action() | Function | WordPress Developer Resources

コメント

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