アクションの追加

アクションを追加するプロセスは、2つのステップを含みます:

コールバック関数の作成

まず、コールバック関数を作成します。この関数は、フックされているアクションが実行されるときに実行されます。

コールバック関数は通常の関数と同様です: プレフィックスを付ける必要があり、functions.php内または呼び出し可能な場所に存在する必要があります。受け取るべきパラメータは、フックしているアクションによって定義されます; ほとんどのフックは明確に定義されているため、選択したアクションが関数に渡すパラメータを確認するためにフックのドキュメントをレビューしてください。

コールバック関数の割り当て(フック)

次に、アクションにコールバック関数を追加します。これはフックと呼ばれ、アクションが実行されるときにコールバック関数を実行するようにアクションに指示します。

コールバック関数が準備できたら、add_action()を使用して、選択したアクションにフックします。最低限、add_action()は2つのパラメータを必要とします:

  • 1. string $hook_name、これはフックしているアクションの名前です、そして
  • 2. callable $callback、これはコールバック関数の名前です。

以下の例では、wporg_callback()initフックが実行されるときに実行されます:

  1. function wporg_callback() {
  2. // do something
  3. }
  4. add_action( 'init', 'wporg_callback' );

利用可能なフックのリストについては、フックの章を参照してください。

経験を積むにつれて、WordPress Coreのソースコードを調べることで、最も適切なフックを見つけることができます。

追加のパラメータ

add_action()は、コールバック関数に与えられる優先度のためのint $priorityと、コールバック関数に渡される引数の数のためのint $accepted_argsという2つの追加パラメータを受け入れることができます。

優先度

多くのコールバック関数が単一のアクションにフックされることがあります。例えば、initフックは多くの使用があります。コールバック関数が他のコールバック関数の前または後に実行されることを保証する必要がある場合がありますが、他の関数がまだフックされていない場合でもです。

WordPressは、コールバック関数が実行される順序を2つの要素に基づいて決定します: 最初の方法は、優先度を手動で設定することです。これは、add_action()の第3引数を使用して行います。

優先度に関する重要な事実は次のとおりです:

  • 優先度は正の整数で、通常は1から20の間です
  • デフォルトの優先度(つまり、priorityの値が手動で指定されていない場合に割り当てられる優先度)は10です
  • 優先度値に理論的な上限はありませんが、現実的な上限は100です

優先度11の関数は、優先度10の関数のに実行され、優先度9の関数は優先度10の関数のに実行されます。

コールバック関数の順序が決定される2番目の方法は、単に同じ優先度の値内で登録された順序です。したがって、同じフックに同じ優先度で登録された2つのコールバック関数は、フックに登録された順序で実行されます。

例えば、以下のコールバック関数はすべてinitフックに登録されていますが、異なる優先度で登録されています:

  1. add_action('init', 'wporg_callback_run_me_late', 11);
  2. add_action('init', 'wporg_callback_run_me_normal');
  3. add_action('init', 'wporg_callback_run_me_early', 9);
  4. add_action('init', 'wporg_callback_run_me_later', 11);

上記の例では:

  • 最初に実行される関数はwporg_callback_run_me_early()で、手動の優先度が9です
  • 次に、wporg_callback_run_me_normal(),が実行されます。優先度が設定されていないため、その優先度は10です
  • 次に、wporg_callback_run_me_late()が実行されます。手動の優先度が11です
  • 最後に、wporg_callback_run_me_later()が実行されます: それも優先度11ですが、wporg_callback_run_me_late()の後にフックされました。

引数の数

時には、コールバック関数がフックされているアクションに関連する追加のデータを受け取ることが望ましい場合があります。

例えば、WordPressが投稿を保存し、save_postフックを実行するとき、保存される投稿のIDと投稿オブジェクト自体の2つのパラメータをコールバック関数に渡します:

  1. do_action( 'save_post', $post->ID, $post );
  1. ``````bash
  2. add_action('save_post', 'wporg_custom', 10, 2);
  3. `

コールバック関数でこれらのパラメータを実際に受け取るためには、コールバック関数が受け入れるパラメータを次のように修正します:

  1. function wporg_custom( $post_id, $post ) {
  2. // do something
  3. }

コールバック関数のパラメータに渡されるパラメータと同じ名前を付けるか、できるだけ近い名前を付けることは良い習慣です。