Сколько раз можно подключиться к одному действию (hook)?

10 янв. 2011 г., 23:33:20
Просмотры: 16.4K
Голосов: 11

У меня есть тема, которая включает некоторую настройку с использованием after_setup_theme, но я хочу написать свои собственные функции, которые также должны выполняться при after_setup_theme. Я предпочитаю хранить свой код в отдельном файле. Можно ли вызывать after_setup_theme несколько раз?

0
Все ответы на вопрос 3
0
34

Хуки в WordPress работают как Голливуд: вы не звоните им, они звонят вам. Но в отличие от Голливуда, они звонят всем по списку.

Это нормально, когда к одному действию или фильтру подключено несколько функций из разных плагинов или даже просто разных функций в ядре WordPress, которые выполняют что-то конкретное. Это не только возможно, но и считается хорошей практикой, так как ваш код становится чище (каждая функция делает только одно дело), и легче отключить конкретный кусок функциональности, отцепив его.

Помните, что вы также можете играть с приоритетами хуков: если вы хотите запустить и functionA(), и functionB() в after_setup_theme, но functionA() должна выполниться перед functionB(), вы можете подключить functionA() с приоритетом по умолчанию 10, а functionB() с приоритетом 20 (или любым другим числом больше 10). Что не сработает, так это подключение другой функции к действию во время выполнения этого действия. Так что вы не можете подключить functionB() к after_setup_theme из functionA(), вызванной в after_setup_theme. Вы можете вызвать её напрямую, но потеряете преимущество раздельных хуков.

11 янв. 2011 г. 10:03:40
0

Моё предложение — создать "главную" функцию, если можно так выразиться, которая будет вызывать все остальные функции. Таким образом, вам нужно будет подключиться к действию только один раз.

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(){ /* Делаем что-то */}

Это также даёт дополнительное преимущество — возможность возвращать значения, которые можно использовать в последующих вызовах функций.

26 апр. 2012 г. 15:29:47
0

Да, вы можете добавить сколько угодно действий к хуку. Просто попробуйте.

11 янв. 2011 г. 02:27:01