Відповіді:
Взагалі: Так, зачекайте, коли спеціальний гачок запустить власний код. Ніколи не кидайте екземпляр об'єкта в глобальний простір імен. Але 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.