web-dev-qa-db-ja.com

WordPressは他のフックにアタッチされた関数を呼び出す前に特定のアクションフックにアタッチされた関数をどのように呼び出しますか

アクションフックにアタッチされたコールバック関数の実行には一定の順序があることを私たちは知っています。

enter image description here 

すべてのフックを実行している間、WordPressはどのアクションが優先されるべきであるかをどのように決定しますか?

2
IAmDhar

WordPress しない 何らかの優先順位を使ってすべてのアクションとフィルタ(つまりフック)を同時に実行する これらのアクションとフィルタフックの実行順序はWordPressコア内でハードコーディングされているPHPファイル

WordPressのソースコード内で、次の4つの関数呼び出しを検索します(任意のテキストエディタのファイル内検索機能を使用)。

  1. apply_filters =>は特定のフィルタを適用します。

  2. apply_filters_ref_array =>配列の引数を指定して、特定のフィルタを適用します。

  3. do_action =>は特定の動作をします。

  4. do_action_ref_array =>は、配列内の引数を指定して特定のアクションを実行します。

上記の各関数呼び出しは、WordPressのソースコード内で複数回使用されており、対応するアクションとフィルターフックの実行順序(優先順位)は、WordPressがそれらの関数呼び出しをいつ行うかによって異なります。

PHP自体がCODEを1行ずつ実行するので、それらの関数とそれに対応するフックの実行順序も、それらの関数呼び出しがどのPHPファイルにあるかによって異なります。

注: 各特定のアクションとフィルターフックの実行順序はCODE内で事前に決定されていますが、単一のフックを複数回使用する場合の実行順序は $ priority パラメーターによって決定されます。 。

WordPressはこれらの関数呼び出しをハードコーディングして、これらのアクションとフィルタフックの実行順序が確実に決まっているようにします。そうでなければ、開発者はテーマとプラグインをコーディングするのに苦労するでしょう。

注: 4.7以降、WordPressは WP_Hook クラスを使用して上記の4つの関数をすべて実装しています。そのため、そのクラスを見て、これらすべてが内部でどのように行われているかを理解することもできます。

2
Fayaz

順番は、WordPressのコーディング方法によって決まります。アクションの実行順序を変えようとしているのなら、WordPressのコアファイルを編集する必要があります(そしてlotを壊してしまいます)。

特定のものが他のものよりも先に実行されるようにしたいのであれば、youフックの方法をWordPressのアクションに変更するだけです。

特定のWordPress機能(is_single()is_home()など)は、特定のWordPressフックが実行された後にのみ機能することに注意してください。

より多くの情報がここにあります: WordPressのフックランシーケンスを取得する方法?

1
ricotheque
1
Faysal Mahamud

コールバックがフック(アクションまたはフィルタ)に追加されるときはいつでも、それは優先度で追加されます。優先順位が指定されていない場合は、デフォルト値の10が使用されます。

//* Add action to init at priority 4
add_action( 'init', 'wpse_262184_init', 4 );

発射された各フックに対して、コールバックは昇順または優先順位で実行されます(小さい番号が先)。 2つのコールバックが同じ優先順位を持つ場合、それらはフックに追加された順序で実行されます。

0
Nathan Johnson