Різниця між "запусканням" та "додаванням"


20

Це питання може бути неправильним, я не впевнений у цьому. Тому що мені це не зрозуміло.

Я знаю, що add_actionвін використовується для підключення нашої функції до вказаної функції. Наприклад, add_action('wp_head'.'myfunc');зараз те, що коли-небудь код myfuncбуде виконуватися в wp_head(). Це зрозуміло, але я сумніваюся, do_actionщо це робить?

Я думаю, що він використовується для створення власного гака, як уже доступні гачки (wp_head, wp_footer, .. тощо) Якщо я маю рацію, може хто-небудь показати мені просту зрозумілу відповідь простим прикладом.

Я спробував різницю в Інтернеті, але всі вказують на різницю між добавкою і add_filter. Я не хочу туди їхати, тому що спершу я хочу уточнити це, а потім переїду туди.

Хтось може мені допомогти?

EDIT після питання POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Я спробував це в плагіні, але я не отримав повідомлення попередження.

Але коли я підключаю ту саму функцію, wp_headтоді вона працює чудово

/******************working****************/
add_action('wp_head','custom_register');

Що відбувається під час дзвінка do_action('custom'); після реєстрації зворотного дзвінка? І переконайтеся, що jQuery завантажений.
fuxia

я не отримав попереджувальне повідомлення ні на задньому, ні на передньому кінці
вс

jQuery завантажуються. Коли я зачепити ту ж функцію , з wp_headним працює нормально , але не зcustom
сонце

ВС, я вважаю, що на ваше первісне запитання відповів toscho, і ви повинні відзначити це як вирішене. Зміни №3 та №4, які ви зробили, належать до нового питання .
brasofilo

Відповіді:


13

Використовуйте do_action( 'unique_name' )для створення власних дій.

Ви можете використовувати це, щоб запропонувати API для свого плагіна , тому інші плагіни можуть реєструвати зворотні дзвінки для вашої користувацької дії. Приклад: Чи потрібно дзвонити в моєму плагіні dogery?

Але ви також можете використовувати власні дії (або фільтри) і в темі. Приклад: Найкращий спосіб втілення користувацьких розділів у тему WordPress

І ви можете комбінувати як плагін, так і тему, яка працює разом. Приклад: Як зробити метод із плагіна доступним у темі?

Підсумок: add_action( 'foo' )реєструє зворотний дзвінок, do_action( 'foo' )виконує цей зареєстрований зворотний дзвінок.


Дякую за допомогу, яку я отримав, це в основному з метою API. Я спробував зразок, але це не вийшло. Чи можете ви там знайшли якісь проблеми? Перевірте мій EDIT @toscho
сонце

Чи можемо ми сказати це як інший випадок, як спадщина? Ідея про розширення і переосмислення класу ми йдемо цим шляхом. Це правильно?
сонце

@sun Хм, так, але ви можете комбінувати обидва підходи , вони не є взаємовиключними.
fuxia

1

Це моя здогадка, тому, якщо ви знаєте краще, будь ласка, прокоментуйте, щоб я міг оновити свою здогадку.

Ваш плагін-код виконується раніше wp_head()(для чого, ми можемо припустити, буде викликати додані до нього дії). Коли ви add_action('wp_head','custom_register'), ви говорите PHP, що коли (в майбутньому) do_action('wp_head')дзвонить, custom_register()також дзвонити . Те саме стосується вашого дзвінка, add_action('custom','custom_register')але, як ви бачите у своєму коді, дзвінок до do_action('custom')вже здійснений, і коли він був викликаний, до нього не було додано (ще) жодної дії. Ось чому Toscho запитав, що відбувається під час дзвінка do_action('custom') після реєстрації зворотного дзвінка. Ваша відповідь щодо заднього та переднього кінців неоднозначна. Якщо ви поміняєте місцями останні два рядки в наступному коді, я думаю, це спрацює:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.

0

do_action: Реєструє гак дій під час add_action: додає функцію зворотного дзвінка до зареєстрованого гака.

Приклад

Подумайте, що ви хотіли щось надрукувати перед бічною панеллю у вашому шаблоні.

  1. Ви додасте гачок дій у файл шаблону index.phpчерез <?php add_action('bp_sidebar_left'); ?>.
  2. Тепер у вашому functions.phpфайлі ви можете додати функцію зворотного дзвінка до цього гака, щоб надрукувати щось, що потрібно.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }


-1

Ви повинні використовувати як нижче:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

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