Там нет ограничений и никаких штрафов за производительность. Чтобы понять почему, вам нужно понять, как все хуки хранятся в экосистеме WP.
Прежде всего вам необходимо понять, где хранятся все хуки и как они это делают. Все хуки для фильтров и действий хранятся в глобальной переменной с именем wp_filter
да, хуки действий тоже хранятся в этой переменной. Эта переменная представляет собой связанный массив, где ключ - это имя действия или фильтра, а значение - другой ассоциативный массив. Например, давайте посмотрим на действие '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.