Відповіді:
Взагалі: Так, зачекайте, коли спеціальний гачок запустить власний код. Ніколи не кидайте екземпляр об'єкта в глобальний простір імен. Але initрідко це потрібно.
Ви зачепитесь якомога пізніше. Якщо ваш перший код працює wp_head, не використовуйте попередній гак. Можна навіть каскадні гачки :
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
Щодо initгачка: Використовуйте wp_loadedзамість цього. Це пробіг після initі після ms_site_check()викликали. Таким чином ви уникаєте запускати свій плагін на недійсному під-сайті під час встановлення на декількох сайтах. Все інше те саме.
Я не бачу великої користі від цієї практики з цих причин:
Функції add_actionта add_filterлише додають запис до глобальної змінної, $wp_filterяка містить усі фільтри та дії. Дивіться джерело . Це не викликає вашу функцію. Ваш код буде працювати тільки , коли do_actionі apply_filtersназивається (з відповідним ім'ям гака), який буває дуже пізно в тому місці , де ці гачки повинні бути.
Ви можете сказати, що завдяки цьому глобальна змінна зросте $wp_filter= = більше потрібної пам'яті. Але я думаю, що створення нової функції має ту саму проблему.
Якщо все зробити в одній функції, ви змусите запам'ятати всі гачки у всіх файлах у вашій темі / плагіні. Ви б нічого подібного не робили:
header.php: додайте гачки та функції зворотного виклику для того, що відбувається в заголовку (наприклад, меню, реєстрація сценарію)content.php: додайте гачки та функції зворотного дзвінка для фільтрації вмістуadmin-menu.php: додайте гачки та функції зворотного дзвінка, щоб додати меню адміністратора(припустимо, що ці файли розміщені у вашій темі / плагіні)
Замість цього ви повинні:
header.php, content.php,admin-menu.php=> Це не дозволить вам зрозуміти, що відбувається, коли ви подивитеся на вміст header.phpфайлу. Ви повинні шукати, щоб знати, коли запускаються ці зворотні дзвінки.
І подумайте про ситуацію, коли у вас декілька класів у вашій темі / плагіні. Ви кладете всі гачки всіх класів в одне місце? Або кожен клас має функцію обгортки, яка містить усі гачки? Це надто зайве!
Вище з цих причин я думаю, що це особистий стиль :). Я бачу деякі рамки, як Hybrid робить те, що ви сказали. Іноді мені важко копатися в цих рамках!
wp_loadedінформації про MS.