没有限制,也没有性能惩罚。要了解原因,您需要了解所有挂钩是如何存储在WP生态系统中的。
首先,您需要了解所有挂钩的存储位置以及它们是如何实现的。过滤器和操作的所有挂钩都存储在名为wp_filter
, yes yes动作挂钩也存储在此变量中。此变量是关联数组,其中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环境可以接受的任何值作为关联数组的键。