Використовувати wp init hocket, щоб зателефонувати на інші гачки?


11

Хочеться знати, чи це хороша практика відповідно до теми WordPress або розробки плагінів.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

Спасибі

Відповіді:


16

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


3
+1 для wp_loadedінформації про MS.
кайзер

велике спасибі за вашу відповідь, все ще сумніваєтеся, що краще завантажувати всі інші гачки всередині wp_loaded або завантажувати їх окремо? мені цікаво, якщо я додаю гачки в wp_loaded, вони будуть підключені раніше, замість того, щоб зачепитися після admin_init або admin_menu?
atinder

каскадні гачки - це не проблема?
atinder

Ні, навіщо це бути? Телефонуйте на другий гачок, лише якщо перший був корисний.
fuxia

3

Я не бачу великої користі від цієї практики з цих причин:

Функції зворотного дзвінка при реєстрації не викликаються

Функції 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 робить те, що ви сказали. Іноді мені важко копатися в цих рамках!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.