制限やパフォーマンスの低下はありません。その理由を理解するには、すべてのフックがWPエコシステムにどのように格納されるかを理解する必要があります。
まず最初に、すべてのフックがどこに保存され、どのように実行されるかを理解する必要があります。フィルターとアクションのすべてのフックはと呼ばれるグローバル変数に保存されwp_filter
、はいはいアクションフックもこの変数に保存されます。この変数は関連付けられた配列です。keyはアクションまたはフィルターの名前、valueは別の連想配列です。たとえば、「init」アクションを見てみましょう。この段階では、次の構造が表示されます。
$wp_filter = array(
'init' => array(...),
);
このサブ配列には、配列として数値キーと値があります。数字キーは私たちの優先事項です。数値キーに関連付けられた配列には、同じ優先順位のフックのリストが含まれています。したがって、を呼び出しadd_action( 'init', 'wpse8170_my_first_init', 20 )
、次にを呼び出しadd_action( 'init', 'wpse8170_my_second_init', 20 )
、最後にを呼び出すadd_action( 'init', 'wpse8170_my_third_init', 10 )
と、例は次のようになります。
$wp_filter = array(
'init' => array(
20 => array(
'wpse8170_my_first_init' => array(
'accepted_args' => 1, // the number of accepted arguments by your hook
'function' => 'wpse8170_my_first_init', // callback function
),
'wpse8170_my_second_init' => array(...),
),
10 => array(
'wpse8170_my_third_init' => array(...),
),
),
);
とき今、init
アクションがトリガーされたすべてのフックはの使用にソートされksort
、今の機能と私たちの配列になります。
array(
10 => array(
'wpse8170_my_third_init' => array(...),
),
20 => array(
'wpse8170_my_first_init' => array(
'accepted_args' => 1, // the number of accepted arguments by your hook
'function' => 'wpse8170_my_first_init', // callback function
),
'wpse8170_my_second_init' => array(...),
),
),
そして、すべてのフックはこのキューで実行されます:最初'wpse8170_my_third_init'
に、'wpse8170_my_first_init'
そして最後に'wpse8170_my_second_init'
。
したがって、制限やペナルティがないこと、そしてPHP環境によって関連付けられた配列のキーとして許容される任意の値を使用できることがわかります。