Сколько раз можно подключиться к одному действию (hook)?
У меня есть тема, которая включает некоторую настройку с использованием after_setup_theme
, но я хочу написать свои собственные функции, которые также должны выполняться при after_setup_theme
. Я предпочитаю хранить свой код в отдельном файле. Можно ли вызывать after_setup_theme
несколько раз?
Хуки в WordPress работают как Голливуд: вы не звоните им, они звонят вам. Но в отличие от Голливуда, они звонят всем по списку.
Это нормально, когда к одному действию или фильтру подключено несколько функций из разных плагинов или даже просто разных функций в ядре WordPress, которые выполняют что-то конкретное. Это не только возможно, но и считается хорошей практикой, так как ваш код становится чище (каждая функция делает только одно дело), и легче отключить конкретный кусок функциональности, отцепив его.
Помните, что вы также можете играть с приоритетами хуков: если вы хотите запустить и functionA()
, и functionB()
в after_setup_theme
, но functionA()
должна выполниться перед functionB()
, вы можете подключить functionA()
с приоритетом по умолчанию 10
, а functionB()
с приоритетом 20
(или любым другим числом больше 10). Что не сработает, так это подключение другой функции к действию во время выполнения этого действия. Так что вы не можете подключить functionB()
к after_setup_theme
из functionA()
, вызванной в after_setup_theme
. Вы можете вызвать её напрямую, но потеряете преимущество раздельных хуков.

Моё предложение — создать "главную" функцию, если можно так выразиться, которая будет вызывать все остальные функции. Таким образом, вам нужно будет подключиться к действию только один раз.
add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
func_a();
func_b();
func_c();
func_d();
func_e();
}
function func_a(){ /* Делаем что-то */}
function func_b(){ /* Делаем что-то */}
function func_c(){ /* Делаем что-то */}
function func_d(){ /* Делаем что-то */}
function func_e(){ /* Делаем что-то */}
Это также даёт дополнительное преимущество — возможность возвращать значения, которые можно использовать в последующих вызовах функций.
