【WordPress】アクションフックの使い方と一覧


WordPressの処理の途中で、独自に作成した関数(プログラム)を実行できるようにする仕組みを『アクションフック(Action Hook)』といいます。

分かりやすくいうと、アクションフックを使えば、”作成した関数”の実行時期を指定することができます

たとえば、「WordPressのコアの読み込みが終わり、HTTPヘッダーを出力する前に何か処理をしたい」という場合、「init」というアクションフックに、作成した関数を登録します。※「HTTPヘッダーを出力する前」とは、ざっくりいうと、ブラウザ画面にWebサイトが表示される前段階のこと

フックとは?

”WordPressのコア”の処理を部分的に変更する仕組みのこと。WordPressのコアとは、WordPress本体のこと

フックに対して独自作成の関数(プログラム)を登録しておくことで、フックのタイミングで、WordPressが行った処理を一部変更したり、元々なかった処理を追加できます。

WorPressのフックは、大きく分けて、「アクションフック」と「フィルターフック」の2つがあります。

「WordPressのコアを直接書き換える」という方法もありますが、WordPressがバージョンアップするたびに書き換え直すことが必要になってしまい、大変!

つまり、アクションフックを理解することは、非常に重要なのです。

以下で、アクションフックの使い方と一覧をご紹介します。

スポンサーリンク

アクションフックに関数を登録する

アクションフックに対して、独自に作成した関数(プログラム)を登録するには、「add_action関数」を使われます。

add_action関数は、functions.phpの中で実行することが非常に多い関数。

この関数は、パラメータを4つ取り、以下のように書きます。


add_action('アクションフック名','登録する関数名', 優先度 , 関数が受け取る引数の個数);

優先度の指定がなく、パラメータ数が1の場合は、「フィルターフック名」と「追加したい関数名」のみでOK♪

各パラメータの内容は、次の通りです。

【add_action関数のパラメータ】
パラメータ 内容
アクションフック名 登録したいフックの名前
登録する関数名 フックのタイミングで実行する関数の名前。
クラスの中でメソッドをコールバックにする場合は、「array($this,'メソッド名')」を渡す。無名関数を使うことも可能
優先度 同じフックに複数の関数が登録されている場合の、実行の優先順位。「10」が一般的な優先度。小さな数値を指定するほど、早く実行される
関数が受け取る引数の個数 フックの関数に渡されるパラメータの数。なおフックの種類によって、パラメータの数は異なります。初期値は「1」
関数が受け取る引数の個数は、たとえばfunction文の()の中に書かれる個数などです。

引数が2つ書かれていれば「2」、3つ書かれていれば「3」と書きます。もし、()の中が空欄なら、4つ目のパラメータは記述不要

主なアクションフック名の一覧

WordPressのコアには多数のアクションフックが用意されています。アクションフックの例として、次のようなものがあります。

フック名 実行されるタイミング
init WordPressのコアの読み込みが終わり、HTTPのヘッダーを出力する前
after_setup_theme テーマの準備ができた
widgets_init サイドバー登録の準備ができた
pre_get_posts クエリを実行する前
switch_theme 他のテーマに変更された
after_switch_theme 他のテーマから変更された
save_post 投稿を保存した
post_updated 投稿が更新された
transition_post_status 投稿のステータスが変化した
before_delete_post 投稿を削除する前
delete_post 投稿を削除した
trash_post 投稿をゴミ箱に移動する前
trashed_post 投稿をゴミ箱に移動した
edit_terms カテゴリー等の分類を保存する前
edited_terms カテゴリー等の分類を保存した
admin_init 管理画面の準備ができた
load_XXX 管理画面のXXX.phpが読み込まれた
loop_start WordPressループが始まる前
loop_end WordPressループが終わった後
wp_head テンプレート内でwp_head関数が実行された
wp_footer テンプレート内でwp_footer関数が実行された
wp_enqueue_script テンプレートにJavaScriptを挿入する前
wp_enqueue_style テンプレートにスタイルシートを挿入する前
スポンサーリンク

たとえば、例をあげると…

カスタム投稿タイプ[product]を作成する場合を例にあげると、次のようになります。

<?php
function add_product_type(){
  カスタム投稿タイプに関する関数を記述
}
add_action('init' , 'add_product_type');
?>

add_product_typeという名前の関数をfunction文を使って作成し、その中にカスタム投稿タイプに関する関数を記述します。

この関数は、アクションフック『init』のタイミングで実行しなければならないので、add_action関数を使って、add_product_type関数をアクションフック『init』に登録します。

アクションフックを解除する

登録したアクションフックを解除(remove)したいという場面もあります。

このような時には、「remove_action関数」を使います。

remove_action関数とは?

特定のアクションフックに付加されている関数を除去する関数。WordPressにデフォルト(初期値)で設定されているものも除去できます。

記述方法は、add_action関数と基本同じ。


remove_action('アクションフック名','解除する関数名',優先度,関数が受け取る引数の個数);

ちなみに、”優先度”と”関数が受け取る引数の個数”を書かずに、”アクションフック名”と”解除する関数名”だけを書く場合が多い

【remove_action関数のパラメータ】
パラメータ 内容
アクションフック名 解除したい関数があるフックの名前
解除する関数名 解除したい関数の名前。
クラスの中でメソッドをコールバックにする場合は、「array($this,'メソッド名')」を渡す。無名関数を使うことも可能
優先度 同じフックに複数の関数が登録されている場合の、実行の優先順位。「10」が一般的な優先度。
小さな数値を指定するほど、早く実行されます
関数が受け取る引数の個数 フックの関数に渡されるパラメータの数。
なおフックの種類によって、パラメータの数は異なります。初期値は「1」

自分で登録した関数だけでなく、WordPressのコアがデフォルトで登録した関数も解除できます

さらに、remove_action関数でフックを解除した後、add_action関数で同じフックを登録し直すことも可能。つまり、一時的にフックを解除し、すぐに元に戻すようなこともできるわけです。

使い方は、基本的に、add_action関数と同じ。”解除したい関数があるフック名”と、”解除したい関数”を記述するだけ。

スポンサーリンク
ページ先頭へ