Детальне ознайомлення з хуками та фільтрами ядра WordPress: від основ до практичного програмування.

Прочитайте за 2 хвилини.
2026-03-20
2026-06-03
2,125
Я заробляю комісію, коли ви робите покупки за посиланнями нижче, без додаткових витрат для вас.

Міцність та гнучкість WordPress значною мірою зумовлені його ретельно спроєктованою системою “хаків та фільтрів”. Цей механізм дозволяє розробникам глибоко налаштовувати та розширювати всі функції WordPress без змін основного коду. Чи потрібно додати до статті власний контент, чи змінити стандартну логіку певної функції – хаки та фільтри є основою для досягнення цього. Розуміння принципів їхньої роботи є ключовим кроком на шляху від звичайного користувача WordPress до розробника.

Основні поняття хуків та фільтрів

У WordPress під „хуками“ (hooks) розуміються спеціальні механізми взаємодії, які поділяються на два основні типи: хуки дій (Action Hooks) та хуки фільтрів (Filter Hooks). Разом вони утворюють основу событийно-орієнтованої архітектури WordPress.

Акційні хаки (action hooks) дозволяють вам виконувати власний код у певні моменти часу або при виникненні певних подій. Наприклад, WordPress запускає відповідні акційні хаки після публікації статті або під час входу користувача. Ви можете скористатися цими можливостями, щоб автоматизувати певні процеси у вашому сайт add_action() Функція “монтує” вашу власну функцію на ці хаки (hooks), що дозволяє виконувати певні завдання у встановлений час. Акційні хаки (action hooks) не передбачають повернення значень; їхнім основним завданням є виконання певних дій.

Рекомендуємо до прочитання. Як створити висококонверсійний незалежний електронний комерційний вебсайт на WordPress за допомогою WooCommerce

Фільтрові хаки дозволяють вам “змінювати” дані перед їх використанням чи збереженням. Наприклад, заголовки статей проходять через низку фільтрів перед тим, як вони відображаються у браузері, а коментарі користувачів – перед їх збереженням у базі даних. Ви можете використовувати ці фільтри для обробки даних відпові add_filter() Функція монтує вашу власну функцію на ці фільтри, змінює передані дані та повертає оброблені значення. Фільтри є етапами у потоці даних, які дозволяють їх обробляти.

UltaHost – хостинг для сайтів, побудованих на платформі WordPress
Гарантія повернення грошей протягом 30 днів, необмежена пропускна здатність мережі та доступ до баз даних, безкоштовний захист від DDoS-атак; знижка 50% при покупці на термін 3 роки (варіанти об’ємів трафіку: 4 ТБ/5

Простий спосіб запам’ятати: „Акція“ (Action) означає виконання певної дії, а „Фільтр“ (Filter) – зміну якогось об’єкта чи стану.

Детальний опис та спосіб використання основних функцій

Щоб використовувати хаки („hooks“), ви повинні оволодіти кількома основними функціями. Ці функції є інтерфейсом для взаємодії з системою подій WordPress.

Найважливішою функцією-зв’язком є… add_action()add_filter()Їхній базовий синтаксис дуже схожий. Перший параметр – це назва хека; другий параметр – це назва власної функції, яку потрібно викликати; третій параметр є необов’язковим та визначає пріоритет виконання (за замовчуванням дорівнює 10); четвертий параметр також є необов’язковим та вказує кількість прийманих аргументів (за замовчуванням дорівню

// 挂载一个动作到 'init' 钩子
add_action( 'init', 'my_custom_init_function' );
function my_custom_init_function() {
    // 当 WordPress 初始化时,执行这里的代码
    // 例如,注册一个自定义文章类型
}

// 挂载一个过滤器到 ‘the_title’ 钩子
add_filter( 'the_title', 'my_custom_title_filter' );
function my_custom_title_filter( $title ) {
    // 修改传入的标题
    $modified_title = '前缀:' . $title;
    // 必须返回修改后的值
    return $modified_title;
}

Параметри пріоритету визначають порядок виконання кількох функцій, які були прикріплені до одного хука (hook). Чим менший номер, тим вищий пріоритет та тим раніше відбувається виконання функції. Кількість параметрів вказує WordPress, скільки параметрів потрібно передати вашій функції-корекції (callback function). do_action()apply_filters() Параметри.

Рекомендуємо до прочитання. Від початківця до експерта на сайті WordPress: повний посібник із налаштування та оптимізації продуктивності для новачків.

Відповідно, функція для видалення гачка є… remove_action()remove_filter()Зазвичай їх використовують для вимкнення певних функцій у темах чи плагінах. При їх використанні необхідно переконатися, що відповідні хаки („hooks“) були додані, а також що параметри (пріоритети) повністю збігаються.

Аналіз сценаріїв практичного застосування

Теорія та практика мають поєднуватися, щоб досягти глибокого розуміння матеріалу. Розглянемо кілька поширених сценаріїв розробки та побачимо, як хаки (hooks) та фільтри (filters) допомагають вирішувати реальні проблем

Типовим сценарієм є автоматичне додавання користувацького контенту перед та після тексту статті. Ми можемо скористатися цією можливістю для покращення вигляду та функціональності статей. the_content Цей фільтр та цей „хак“ (hook) дуже потужні; всі дані, які проходять через них, піддаються обробці. the_content() Весь вміст статей, що виводиться функцією, проходить через неї.

hosting.com Віртуальний хостинг
Висока продуктивність завдяки процесорам AMD EPYC, SSD-накопичувачам NVMe і технології LiteSpeed, цілодобова експертна підтримка, розширені заходи безпеки, включаючи SSL, грубу силу, захист від шкідливих програм і DDoS, економія до 73%.
add_filter( ‘the_content’, ‘add_signature_to_post’ );
function add_signature_to_post( $content ) {
    // 仅在单篇文章页面且非Feed输出时添加
    if ( is_single() && ! is_feed() ) {
        $signature = ‘<p><em>Ця стаття вперше була опублікована на моєму блозі. При перепублікації будь ласка, вкажіть джерело.</em></p>’;
        $content = $content . $signature;
    }
    return $content;
}

Інший сценарій – це налаштування переадресування користувачів після автентифікації. За замовчуванням після входу користувача перенаправляється на адміністративну панель. Однак на сайтах для членів ми можемо бажати, щоб вони потрапляли на головну сторінку або на певну конкретну login_redirect Фільтри.

add_filter( ‘login_redirect’, ‘custom_login_redirect’, 10, 3 );
function custom_login_redirect( $redirect_to, $request, $user ) {
    // 检查用户对象是否存在且不是WP_Error,并且有权限
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        // 如果是管理员,跳转到后台;否则跳转到站点首页
        if ( in_array( ‘administrator’, $user->roles ) ) {
            return admin_url();
        } else {
            return home_url();
        }
    }
    // 默认情况返回原来的重定向地址
    return $redirect_to;
}

Розширені техніки та практики розробки

Коли ви опануєте основи використання, ви зможете дослідити більш ефективні та безпечні підходи до розробки.

По-перше, використання анонімних функцій (закритих функцій). Для простих, одноразових та не потребуючих повторного використання копій обробних функцій (хуків) використання анонімних функцій дозволяє зробити код більш компактним та уникнути забруднення гл

Рекомендуємо до прочитання. Повний курс з розробки тем для WordPress: створення професійної теми для вебсайту від нуля до готового продукту.

add_action( ‘wp_footer’, function() {
    echo ‘<!-- 页面加载完成于:’ . current_time( ‘mysql’ ) . ‘ -->’;
});

По-друге, класи та методи використовуються як калебеки (callbacks). У плагінах чи темах, написаних за принципами об’єктно-орієнтованого програмування, використання методів класів у якості калебеків є кращим способом організації коду. Для цього потрібно використ

class My_Plugin_Core {
    public function __construct() {
        add_action( ‘admin_init’, array( $this, ‘register_admin_settings’ ) );
        add_filter( ‘pre_get_posts’, array( $this, ‘modify_main_query’ ) );
    }

public function register_admin_settings() {
        // 注册设置
    }

public function modify_main_query( $query ) {
        // 修改主查询
        if ( ! is_admin() && $query->is_main_query() ) {
            // 你的逻辑
        }
        return $query;
    }
}
new My_Plugin_Core();

Наостанок – налагодження та дослідження хуків. Під час розробки дуже важливо знати, які хуки виконуються на поточній сторінці та у якому порядку. Для цього можна використовувати такі інструменти, як… Debug Bar Плагін або розширення, створене на його основі Debug Bar Actions and Filters Addon Існують додатки (плагіни), які дозволяють візуалізувати всі активовані хеки (hook-функції). Крім того, пряме спостереження за певними хеками у коді є ефективним способом їх налагодження.

Міжсерверний віртуальний хостинг
Віртуальний хостинг $2.50 USD на місяць, перший місяць $0.1 USD за промокодом tryinterserver, 461 скрипт хмарних додатків, встановлення в один клік.
add_action( ‘all’, function( $hook_name ) {
    if ( strpos( $hook_name, ‘save_post’ ) !== false ) {
        error_log( ‘当前触发钩子:’ . $hook_name );
    }
});

підсумок

Система хуків та фільтрів у WordPress є душею її розширюваності – вона елегантно роз’єднує ядро системи від користувацького коду завдяки архітектурі, заснованій на обробці подій. Від базових концепцій дій (actions) та фільтрів (filters) до більш складних механізм add_actionadd_filter Від використання основних функцій WordPress до розв’язання практичних завдань, таких як зміна вмісту статей чи переадресування користувачів після входу в систему, розробники можуть поступово опанувати цей потужний інструмент. На наступному етапі використання анонімних функцій, об’єктно-орієнтованого підходу та ефективних методів налагодження коду дозволяє зробити його більш професійним та зручним у обслуговуванні. Вільне володіння механізмами-хуками (hooks) та фільтрами означає, що ви дійсно маєте можливість формувати поведінку WordPress відповідно до своїх потреб, що є ключовим фактором для

Часті запитання

Яка найосновніша відмінність між дійовими хуками (action hooks) та фільтрувальними хуками (filter hooks)?

Акційні хаки (action hooks) призначені для виконання певного блоку коду у певний момент часу; вони не повертають жодних значень тому, хто їх викликав. Їхня основна мета – виконати певну операцію чи завдання. Типовим прикладом такої функції є… do_action()add_action()

Фільтрові хаки (filter hooks) використовуються для модифікації даних перед тим, як вони досягнуть кінцевого пункту призначення (наприклад, бази даних чи браузера). Вони мають повертати певне значення (зазвичай модифіковане початкове значення даних). Їхній основний задачі – змінювати вміст даних. Типовим прикладом такої apply_filters()add_filter()

Як дізнатися, чи є певний хук (hook) дією (action) чи фільтром (filter)?

Найнадійніший спосіб – це ознайомитися з офіційною документацією (WordPress Codex/Developer Resources). На практиці також можна визначити, чи використовується певна функція, переглянувши її виклики у вихідному коді. do_action Виклик – це функція-хакер (action hook); якщо використовувати… apply_filters Якщо викликати певну функцію, це буде виконання фільтрувального хака (filter hook). Крім того, багато додатків для розробників (наприклад, Query Monitor) також розрізняють дії (actions) та фільтри під час їх відображення.

Чому доданий мною фільтр не працює?

Існує кілька можливих причин: по-перше, перевірте, чи правильно написано ім’я хука (функції, яка виконує певну дію). По-друге, переконайтеся, що ваша функція-колбек (callback function) правильно визначена та активно використовується системо add_filter Було успішно додано зміни (переконайтеся, що код був виконаний до того, як був активований відповідний хук). По-третє, перевірте, чи ваша функція-корекція правильно повертає значення; функція-фільтр обов’язково має повертати результат. По-четверте, можливо, існують проблеми з пріоритетом – інші фільтри з вищим пріоритетом перекрили ваші зміни. Ви можете спробувати налаштувати параметри пріоритету. Нарешті, використовуйте умовні теги (якщо is_single()Переконайтеся, що ваш код працює у очікуваному контексті.

Під час розробки плагінів чи тем, коли варто створювати власні хаки (custom hooks)?

Коли функції, які ви розробляєте, стають достатньо складними, і ви бажаєте надати іншим розробникам (або вашому майбутньому собі) можливості їх розширення чи модифікації, слід створювати власні „хаки“ (custom hooks). Наприклад, після того, як ваш плагін виконає основну логіку, можна викликати власний хак дій, щоб інший код міг виконати додаткові операції; або перед виведенням складних даних – застосувати власний фільтр, щоб інший код міг їх змінити. Це відповідає принципу відкритості та замкнутості (open-closed principle), що значно підвищує розширюваність та зручність використання коду. do_action Створіть власну дію (custom action) та використовуйте її за потреби. apply_filters Створення власного фільтра.