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

8

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

gillespieza
источник

Ответы:

27

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

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

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

Ян Фабри
источник
7

Мое предложение было бы иметь функцию «мастер», если хотите, которая вызывает все ваши другие функции. Таким образом, вам нужно подключиться к этому действию только один раз.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

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

Аарон Вагнер
источник
4

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

Фуксия
источник