WordPress
機能:add_action()
サーチ…
構文
- add_action($ tag、$ function_to_add)
- add_action($ tag、$ function_to_add、$ priority)
- add_action($ tag、$ function_to_add、$ priority、$ accepted_args)
パラメーター
| パラメータ | 詳細 |
|---|---|
| $タグ | (string)(必須) $function_to_addがフックされるアクションの名前 |
| $ function_to_add | ( callable )(必須) $tag指定されたアクションが実行されたときに呼び出される関数 |
| $ priority | (int)(オプション)デフォルト値: 10特定のアクションに関連付けられた関数の実行順序を指定するために使用します。下位番号は以前の実行に対応し、同じ優先度を持つ機能はアクションに追加された順に実行されます。 |
| $ accepted_args | (int)(オプション)デフォルト値: 1関数が受け入れる引数の数。 |
備考
add_action()関数は、PHP関数を特定のアクション "タグ"または名前に関連付けるアクションフックを作成します。特定のタグを持つdo_action() (またはdo_action_ref_array() )の呼び出しによってアクションがトリガーされると、そのタグにフックされたすべての関数が実行されます。
ほとんどの場合、この関数は、テーマのfunctions.phpファイルまたはプラグインファイル、あるいはどちらかでロードされた別のソースファイルで使用する必要があります。
この関数はPlugin APIの一部です
基本アクションフック
add_action()の最も基本的なアプリケーションは、WordPressインストールのソースコード内の特定の場所で実行されるカスタムコードを追加することです - WordPressのコアによって提供されるアクションを使用するか、プラグインなどのサードパーティコードによって作成されるアクションを使用します。テーマ。
サイトの<head></head>セクションにコンテンツを追加するには - サイトの著作権情報がどこにあるかを示す<link>メタ要素を追加するなど、 add_action()を使用して、 'wp_head'アクションへの適切なマークアップ(WordPressが<head>セクションを作成するときに "トリガー"する):
function add_copyright_meta_link() {
echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}
add_action( 'wp_head', 'add_copyright_meta_link' );
アクションフック優先度
任意の数の機能を任意のアクションに「フック」することができます。場合によっては、フックされた関数が他のものの前後に実行することが重要ですadd_action() 、 $priorityの3番目のパラメータがadd_action()になります。
$priority引数が省略された場合、関数はデフォルト優先度10でアタッチされます。アクションがトリガされると、「フックされた」関数は$priorityが最小で追加された関数から開始され、 $priorityが最大の関数に進み$priority 。同じ優先度を共有するフックされた関数は、追加された順番add_action()それぞれのadd_action()呼び出しが実行された順序add_action()呼び出されます。
たとえば、外部のeコマースサイトのアフィリエイトリンクに訪問者をdaily-dealページに転送するために、第三者のプラグインが'template_redirect'アクションにフックされた関数を使用しているが、リダイレクトを希望しているとしますログインしているユーザーに対してのみ発生します。ログアウトした訪問者をサインインページに送信するには、独自の'template_redirect'フックを使用する必要があります。サードパーティのプラグインがデフォルトの$piorityが10の関数をアタッチしたことを確認したら、ログインしたチェックが最初に行われるように、優先度9関数をフックできます。
function redirect_deal_visitors_to_login() {
if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
wp_redirect( wp_login_url() );
exit();
}
}
add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );
クラスとオブジェクトメソッドをアクションにフックする
PHPクラスは、コード構成を改善し、名前の衝突を最小限に抑える強力なツールです。ある時点で、クラスメソッドのアクションフックを作成する方法の問題が必然的に発生します。
$function_to_add引数は、関数の名前を含む文字列として表示されることがよくありますが、引数のデータ型は実際には " 呼び出し可能 "です。これは、関数またはメソッドへの参照としてまとめられます。
クラスやオブジェクトのメソッドを参照するために使用できる、多くの呼び出し可能な形式があります。しかし、すべての場合において、参照される方法は、公的になければならない 見えます 。 publicキーワードがプレフィックスされてpublicか、visibilityキーワードがまったくない場合(メソッドのデフォルトはpublic)、メソッドはpublicメソッドです。
オブジェクトメソッドアクションフック
オブジェクトメソッドは、クラスの特定のインスタンスに対して実行されます。
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
上記のクラスを以下のようにインスタンス化した後、
$my_class_instance = new My_Class();
initialize()メソッドは通常、 $my_class_instance->initialize();呼び出してオブジェクトに対して呼び出されます$my_class_instance->initialize(); 。メソッドを'init' WordPressアクションにフックするには、インスタンスへの参照を含む配列とオブジェクトメソッドの名前を含む文字列を渡します。
add_action( 'init', [ $my_class_instance, 'initialize' ] );
add_action()がオブジェクトメソッド内で呼び出された場合、 $this疑似変数も使用できます:
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
add_action( 'init', [ $this, 'initialize' ] );
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
クラスメソッドアクションフック
クラスメソッドは、特定のインスタンスではなくクラスに対して静的に実行されます。次のクラスを考えると、
class My_Class {
// Initialization function
public static function initialize() {
// (Initialization logic)
}
}
initialize()メソッドは、通常、 :: scope-resolution演算子、つまりMy_Class::initialize();を使用して呼び出されMy_Class::initialize(); 。静的なクラスメソッドをWordPressにフックするには、いくつかの方法があります:
クラス名を含む文字列とメソッド名を含む文字列で構成される配列を使用する:
add_action( 'init', [ 'My_Class', 'initialize' ] );::operatorを含むメソッドへの完全な参照を含む文字列を渡す:add_action( 'init', 'My_Class::initialize' );静的クラスメソッド内で
add_action()を呼び出すと、クラス名の代わりにselfキーワードまたは__CLASS__マジック定数を使用できます。これは、クラス継承の場合、これらの項目の値がやや直感的になるにつれて、一般的に推奨されないことに注意してください。class My_Class { // Setup function public static function setup_actions() { add_action( 'init', 'self::initialize' ); } // Initialization function public static function initialize() { // (Initialization logic) } }