Основи дійових хуків у WordPress
Кожного разу, коли ви починаєте вивчати більш просунуте програмування – будь то WordPress або будь-який інший фреймворк, бібліотека, основа чи мова програмування – бувають моменти, коли нові концепції часто бувають складнішими для розуміння, ніж інші.
Загалом я вважаю, що це правда, якщо людина вивчає основи, скажімо, об’єктно-орієнтованого програмування, але не знайомиться з нюансами певних речей, таких як шаблони проектування.
Приклад: я писав про шаблон проектування, керований подіями (або публікацію-підписку або Pub/Sub, як деякі люблять це називати) в інших публікаціях.
Так, у кожного є певні відмінності, але загальна ідея полягає в тому, що щось відбувається, і виникає подія, і будь-який, хто слухає цю подію або підписаний на цю подію, відповість.
Фотографія Клауса Грюнштойдля на Unsplash
Це основний шаблон, який використовує WordPress, який дозволяє нам буквально підключатися до певних моментів виконання. Загалом ми можемо концептуалізувати це як хуки дій у WordPress.
У будь-якому випадку, програма надає нам доступ до певних пунктів для додавання власних функцій. Після реєстрації цієї функції WordPress залишить свою кодову базу, так би мовити, перейде до нашої, а потім повернеться до нашої.
Це досить легко зрозуміти, але що, якщо ви хочете розкрити частини свого коду, які дозволяють іншим підключатися до вашого коду?
Хуки дій у WordPress
Перш ніж дивитися, як WordPress реалізує ці шаблони, важливо зрозуміти основи цього шаблону. Хоча це аж ніяк не всеосяжно, воно має на меті допомогти дати базове розуміння шаблону, щоб можна було читати та писати орієнтований на WordPress код.
Отже, як краще думати про шаблон Pub/Sub? Вікіпедія визначає це як:
В архітектурі програмного забезпечення публікація–підписка — це шаблон обміну повідомленнями, де відправники повідомлень, які називаються видавцями, не програмують повідомлення, які надсилаються безпосередньо певним одержувачам, які називаються передплатниками, а натомість класифікують опубліковані повідомлення за класами, не знаючи, які передплатники, якщо такі є., може бути. Подібним чином передплатники виявляють інтерес до одного або кількох класів і отримують лише ті повідомлення, які представляють інтерес, не знаючи, які видавці існують, якщо такі є.
Розуміння шаблону
Це може бути багато, щоб зрозуміти спочатку. Я не знаю, але давайте розберемо:
- Існує служба, у нашому випадку це WordPress, яка відповідає за публікацію повідомлень для всіх, хто підписався (вона не обов’язково знає, хто слухає).
- Коли абонент прослуховує, він виконуватиме дії щоразу, коли чутиме цю дію.
- Після завершення виконання коду передплатника програма повернеться до вихідної точки виконання (куди видавець надіслав повідомлення).
У цьому є нюанси, такі як асинхронна функціональність тощо, але це більш просунуте, ніж я хотів би описати в цій конкретній публікації. Зрештою, мета цього — закласти основу для розуміння та впровадження функціональності.
Асинхронна функціональність може потрапити в потоки або Ajax через ці важливі теми, це не той пост.
Як це виглядає в WordPress?
Мабуть, найпростішим способом описати цей конкретний шаблон у WordPress є використання викликів функцій:
- зробити_дію
- add_action
Іноді номенклатура може заплутати, але простіше кажучи, do_action публікує подію та підписується на подію add_action. Або, можливо, краще подумати про це:
do_action повідомляє WordPress виконувати будь-які додані дії.
Іноді корисно мати прості фрази, щоб запам’ятати, як все працює. Я не знаю, чи ця фраза найпам’ятніша, чи запам’ятовується вище, але це щось, чи не так?
Крім того, зауважте, що do_action і add_action є ключовими для WordPress і також доступні для нашої розробки. Перш ніж йти далі, давайте розглянемо, що означає кожен із них:
Для do_action :
Ця функція викликає всі функції, приєднані до гака дії
$tag. Можна створити нові хуки дій, просто викликавши цю функцію, вказавши назву нового хука за допомогою$tagпараметра.
Або навіть простіше кажучи:
Виконувати функції, підключені до конкретного хука дії.
Коли мова йде про хуки, це можуть бути хуки, визначені WordPress, або власні хуки, які ви вказуєте у своїй темі чи плагіні.
Що стосується add_action :
Дії — це хуки, які ядро WordPress запускає в певні моменти під час виконання або коли відбуваються певні події. Плагіни можуть вказати, що одна або кілька його функцій PHP виконуються в цих точках за допомогою Action API.
І так само, простіше кажучи:
Підключає функцію до певної дії.
Це практичне налаштування дещо відрізняється, оскільки ми зазвичай використовуємо add_action для додавання власного коду до WordPress.
Практичний приклад
Наприклад, можливо, ви написали щось подібне до цього:
<?php
add_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');
/**
* Processes the permalink so we can remove any characters that may cause a problem when communicating
* with the API.
*
* @param array $data The array of information about the post.
* @return array $data The data without the malformed information in the post name for the URL.
*/
public function processPermalink($data)
{
if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {
$data['post_name'] =
preg_replace(
'/(%ef%b8%8f|™|®|©|™|®|©|™|®|©)/',
'',
$data['post_name']
);
}
return $data;
}
У цьому випадку десь у кодовій базі WordPress є виклик do_action для хука wp_insert_post_data, і він приймає функцію та передає їй принаймні один параметр.
Додавання власних хуків
Але що, якщо ви хочете дати іншим розробникам можливість підключатися до вашого плагіна чи теми? У такому випадку вам слід подбати про використання do_action, а сторінка, посилання на яку наведено раніше в цьому документі, містить усе необхідне для цього налаштування.
На мою думку, це насправді набагато простіше, ніж працювати з add_action, оскільки add_action забезпечує не лише підключення до існуючого видавця, але й додавання власної спеціальної логіки.
do_action, з іншого боку, вимагає, щоб ми надали назву функції, яка буде виконана, а потім список аргументів, які будуть передані функції, яка буде виконана.
Це воно?
Якщо говорити настільки просто, наскільки я можу це зробити, так. Є деякі нюанси щодо пріоритету, кількості аргументів, роботи з просторами імен і об’єктно-орієнтованого програмування. Але, знову ж таки, це виходить за рамки цієї конкретної публікації. Можливо, я розповім про це більш детально в іншій публікації.
Але наразі, якщо ви не знайомі з основами:
- шаблон Pub/Sub,
- do_action,
- і add_action
Тепер вам достатньо зручно читати код, з яким ви працюєте, розуміти, як код функціонує, і навіть впроваджувати власні рішення, коли це необхідно.
Зараз я пишу електронну книгу (разом із різноманітним іншим преміум-контентом). Якщо вам цікаво, перевірте, що ви отримуєте.



