Hook — це передбачена точка розширення WordPress. Вона дозволяє виконати власну функцію в певний момент або змінити значення, не редагуючи core чи чужий plugin. Завдяки hooks оновлення системи не повинно стирати вашу логіку.
Action і filter: головна різниця
Action повідомляє, що подія відбулася: WordPress ініціалізувався, post збережено, footer формується. Filter отримує значення, змінює його і зобов’язаний повернути результат.
Простий action
function lc_register_assets() {
wp_enqueue_style( 'lc-theme', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'lc_register_assets' );
Callback передається без дужок: WordPress викличе його тоді, коли спрацює hook.
Простий filter
function lc_excerpt_length( $length ) {
return 24;
}
add_filter( 'excerpt_length', 'lc_excerpt_length' );
Якщо callback не поверне значення, наступні частини системи отримають null. Це одна з найчастіших помилок.
Priority, arguments і безпечний scope
Менше число priority виконується раніше; default — 10. Четвертий parameter задає кількість arguments, які отримає callback. Глобальні filters можуть працювати у frontend, admin, menu, REST output і widgets, тому context guard має бути частиною прикладу.
add_filter( 'the_title', 'lc_course_title', 20, 2 );
function lc_course_title( $title, $post_id ) {
if ( is_admin() || ! is_singular( 'course' ) || ! in_the_loop() || ! is_main_query() ) {
return $title;
}
return 'Курс: ' . $title;
}
Навіть із guards перевірте breadcrumbs, navigation, REST і secondary loops. Для реальної задачі краще обрати найбільш вузький documented hook.
Реалістичний спосіб пошуку hook
- Сформулюйте момент або значення, яке треба змінити.
- Перевірте офіційну документацію і source code.
- Подивіться аргументи та момент виклику.
- Додайте callback із вузькою умовою.
- Перевірте frontend, admin і крайові випадки.
Чому не можна редагувати core
Зміна файлів WordPress або plugin зникне після оновлення і може створити вразливість. Власну логіку розміщують у theme або plugin, а templates перевизначають лише через задокументовані механізми.
Типові помилки
- Filter нічого не повертає.
- Callback запускається на всіх сторінках без scope.
- Використовується неправильна кількість аргументів.
- Anonymous callback неможливо зняти через
remove_filter.
Що потрібно знати перед практикою
Якщо синтаксис функцій або HTTP ще незнайомий, спочатку прочитайте PHP для початківців: змінні, функції, форми та HTTP. Практичне використання actions і filters входить у PHP & WordPress Development.
Callbacks, debugging і перевірка
Для remove_action() або remove_filter() потрібні той самий callable reference, та сама priority і правильний момент виконання. Anonymous callback можна зняти, якщо reference на нього було збережено; без цього відтворити той самий callable пізніше складно.
- Перевірте точну назву hook і його arguments.
- Переконайтеся, що файл завантажився до події.
- Додайте короткий log у callback.
- Перевірте scope, priority та return у всіх filter branches.
- Протестуйте frontend, admin, REST і суміжні post types.
Не кожна зміна потребує hook
Якщо існує setting, block option або template part, спершу використайте його. Hook доречний для поведінки, яку система свідомо дозволяє розширювати. JavaScript DOM hack поверх server markup зазвичай крихкіший.
Невелике завдання
Створіть plugin, який додає повідомлення після content лише для posts певної category. Реалізуйте scope, escaping і можливість вимкнути callback. Потім поясніть, чому це filter, а не action. Така вправа поєднує синтаксис із реальною архітектурою WordPress.
Висновок
Hook є контрактом розширення WordPress: action виконує поведінку, filter повертає значення. Безпечна зміна використовує вузький context, правильні arguments і перевіряється поза однією сторінкою. Власну functionality зберігайте у theme або plugin, але ніколи не редагуйте WordPress core.