
Каждый хук идентифицируется уникальным именем и может принимать аргументы. Для добавления функции используется add_action() или add_filter(), а для удаления – remove_action() или remove_filter(). Порядок выполнения функций регулируется параметром приоритета: чем ниже значение, тем раньше вызывается функция.
При разработке плагинов или кастомизации тем рекомендуется избегать избыточного использования глобальных переменных. Вместо этого функции должны быть изолированы и привязаны к конкретным хукам, что упрощает поддержку и уменьшает вероятность конфликтов с другими расширениями.
Тестирование хуков должно включать проверку аргументов и порядок выполнения. Использование has_action() и did_action() позволяет отследить регистрацию и активацию функций, обеспечивая корректную интеграцию кода в существующую архитектуру WordPress.
Как подключать функции к действиям через add_action
Функция add_action связывает вашу пользовательскую функцию с определённым событием WordPress. Синтаксис выглядит так: add_action( $hook, $function_to_add, $priority, $accepted_args ). Параметр $hook указывает на точку подключения, например, 'init' или 'wp_footer'. $function_to_add – имя вашей функции. $priority задаёт порядок выполнения, по умолчанию 10, чем меньше значение, тем раньше выполняется функция. $accepted_args указывает количество аргументов, которые функция может принимать.
Рекомендуется создавать отдельные функции для действий, избегая анонимных функций при сложной логике, чтобы было проще отключать их через remove_action. Например: function custom_scripts() { wp_enqueue_script('custom-js', get_template_directory_uri().'/js/custom.js'); } add_action('wp_enqueue_scripts', 'custom_scripts');. Здесь функция подключается к событию загрузки скриптов и гарантирует корректную очередность.
Для отладки используйте did_action( $hook ) и has_action( $hook, $function_to_add ), чтобы проверить, сработала ли функция и в каком приоритете. При подключении нескольких функций к одному хуку важно учитывать зависимость между ними, корректно выставляя приоритеты, чтобы избежать конфликтов или повторного выполнения действий.
При работе с объектно-ориентированным кодом используйте массивы: add_action('init', [$this, 'method_name']);. Это обеспечивает правильное связывание методов класса с хуками и упрощает управление подключениями при наследовании.
Не рекомендуется подключать функции к хукам внутри функций или условий, которые могут не выполниться при загрузке, так как это приведёт к непредсказуемому поведению. Лучше размещать add_action в основном файле плагина или в functions.php, чтобы гарантировать подключение на этапе инициализации WordPress.
Использование фильтров для изменения данных с add_filter
Параметр hook_name определяет точку подключения, callback_function – функцию, изменяющую данные, $priority регулирует порядок вызова при нескольких фильтрах, $accepted_args указывает количество аргументов, передаваемых в функцию.
function modify_post_title( $title ) { return 'Новое: ' . $title; }
add_filter( 'the_title', 'modify_post_title', 10, 1 );
Фильтры работают с любыми типами данных: строками, массивами, объектами. Для сложных структур можно использовать передачу по ссылке, чтобы снизить накладные расходы на копирование.
Для корректной работы фильтров важно возвращать изменённое значение. Любые дополнительные действия, не возвращающие результат, не повлияют на исходные данные и могут нарушить цепочку обработки.
Рекомендуется использовать уникные имена функций и префиксы, чтобы избежать конфликтов с плагинами и темами. Для условного применения фильтра можно подключать функцию через проверку условий внутри колбэка.
Фильтры можно комбинировать: несколько функций на один хук вызываются по порядку $priority. Более низкий приоритет выполняется раньше, более высокий – позже, что позволяет строить многоуровневые модификации.
Использование remove_filter позволяет отключить фильтр, зарегистрированный ранее, что полезно при конфликте между плагинами или при необходимости отменить стандартное поведение темы.
Порядок выполнения хуков и приоритет функций
В WordPress порядок выполнения хуков определяется двумя основными факторами: типом хука (action или filter) и приоритетом, заданным при регистрации функции через add_action или add_filter.
Приоритет функции задается числом от 0 до 999, где:
- Меньшее значение – функция выполняется раньше;
- По умолчанию используется приоритет 10;
- Одинаковый приоритет – функции выполняются в порядке регистрации.
Алгоритм выполнения хуков:
- WordPress встречает хук в коде ядра, темы или плагина.
- Определяется список функций, зарегистрированных для этого хука, с их приоритетами.
- Функции сортируются по приоритету, от меньшего к большему.
- Функции с одинаковым приоритетом выполняются в порядке добавления через
add_actionилиadd_filter.
Рекомендации по управлению приоритетом:
- Используйте низкие значения приоритетов для критичных операций, например, регистрации пользовательских типов постов перед инициализацией таксономий.
- Высокие значения удобны для модификации данных после выполнения основных функций.
- При сложных зависимостях проверяйте порядок с помощью
has_actionиcurrent_filterдля предотвращения конфликтов. - Документируйте выбранные приоритеты, чтобы другие разработчики понимали логику последовательности.
Контроль порядка выполнения особенно важен для фильтров, где данные могут быть изменены несколькими функциями. Несоблюдение правильного приоритета приводит к непредсказуемым результатам и конфликтам плагинов.
Передача и получение аргументов в хук-функциях
В WordPress хуки позволяют передавать данные между ядром, плагинами и темами. Для передачи аргументов в функцию через хук используется третий параметр функции add_action или add_filter – $accepted_args, который определяет, сколько значений будет передано функции.
Пример передачи аргументов в фильтр:
function custom_filter($content, $post_id) {
return $content . ' ID поста: ' . $post_id;
}
add_filter('the_content', 'custom_filter', 10, 2);
Здесь 2 в конце add_filter указывает, что функция принимает два аргумента: $content и $post_id. Без указания числа аргументов WordPress передаст только первый параметр.
Если функция принимает больше аргументов, чем указано в $accepted_args, лишние значения будут проигнорированы. Напротив, если аргументов меньше, чем передает хук, недостающие будут иметь значение null.
Для удобства можно использовать массивы для передачи нескольких связанных данных через один аргумент. Это упрощает добавление новых значений без изменения структуры функции:
function handle_post_data($data) {
$data['custom'] = 'значение';
return $data;
}
add_filter('my_custom_hook', 'handle_post_data', 10, 1);
Ниже таблица демонстрирует стандартные правила передачи аргументов в хуки:
| Параметр | Назначение | Пример |
|---|---|---|
| $hook_name | Название хука | ‘the_content’, ‘save_post’ |
| $function_to_add | Имя функции-обработчика | ‘custom_filter’, ‘handle_post_data’ |
| $priority | Порядок выполнения функции (меньше = раньше) | 10, 20 |
| $accepted_args | Количество аргументов, которые функция принимает | 1, 2, 3 |
Рекомендация: всегда явно указывайте $accepted_args, чтобы избежать непредсказуемого поведения при изменении ядра или плагинов. Для фильтров с несколькими аргументами используйте строгие типы данных, чтобы предотвратить ошибки при обработке значений.
Создание собственных хуков для темы или плагина

Пример создания действия в теме:
function my_theme_before_content() {
do_action('my_theme_before_content');
}
Теперь любой плагин или дочерняя тема могут подключить функцию к этому хуку через add_action('my_theme_before_content', 'callback_function');.
Для фильтра:
function my_plugin_modify_title($title) {
return apply_filters('my_plugin_modify_title', $title);
}
Функции, подключенные к фильтру, должны принимать необходимые параметры и возвращать изменённое значение. Например: add_filter('my_plugin_modify_title', 'change_title');.
Рекомендуется использовать уникные префиксы для названий хуков, чтобы избежать конфликтов с другими плагинами или темами. В документации WordPress указано: префикс должен быть коротким, но информативным, обычно идентифицирующим разработчика или проект.
При создании хуков учитывайте порядок выполнения функций через параметр приоритета в add_action или add_filter. Значение по умолчанию – 10; меньшее число выполняет функцию раньше, большее – позже.
Для передачи дополнительных аргументов используйте четвёртый параметр в do_action и apply_filters, а затем указывайте количество принимаемых аргументов при подключении функции. Это позволяет гибко передавать данные внутрь подключаемых функций.
Удаление или замена функций в существующих хуках

Замена функции возможна путем последовательного удаления и добавления новой функции с тем же хуком. Это обеспечивает сохранение порядка вызовов и предотвращает конфликты с другими плагинами. Пример: сначала удалить remove_action('init', 'old_function', 15);, затем добавить add_action('init', 'new_function', 15);.
Для анонимных функций или методов класса удаление требует хранения ссылки на функцию при добавлении. Без этого remove_action не сработает. Например, для методов класса нужно использовать массив: add_action('save_post', [$this, 'save_meta'], 20); remove_action('save_post', [$this, 'save_meta'], 20);.
Рекомендуется выполнять удаление и замену функций внутри хука after_setup_theme или plugins_loaded, чтобы гарантировать, что все исходные действия уже зарегистрированы. Это снижает риск ошибок при попытке удалить функции до их добавления.
Для массовой замены функций можно использовать вспомогательные функции, перебирая глобальный массив $wp_filter, проверяя имена функций и приоритеты. Такой подход позволяет динамически модифицировать хуки без ручного перечисления всех функций.
Вопрос-ответ:
Что такое хуки в WordPress и для чего они нужны?
Хуки — это механизмы, позволяющие подключать собственный код к процессам WordPress без изменения исходных файлов ядра. Они помогают изменять поведение сайта или добавлять функционал в определённые моменты работы системы, например, при выводе контента, сохранении записи или загрузке страницы.
В чем разница между action и filter хуками?
Action-хуки выполняют дополнительные действия в момент срабатывания события, не изменяя передаваемые данные. Filter-хуки позволяют изменять данные перед их выводом или сохранением. Например, с помощью filter можно изменить текст поста перед отображением на сайте, а action — отправить уведомление при публикации записи.
Как подключить свой хук в теме или плагине?
Для подключения используется функция add_action() или add_filter(). В неё передаются имя хука, имя вашей функции и необязательные параметры приоритета и количества аргументов. Например, add_action(‘init’, ‘my_function’); подключает функцию my_function к событию инициализации WordPress.
Можно ли отключить стандартные хуки WordPress?
Да, это возможно с помощью функций remove_action() и remove_filter(). Они требуют указания точного имени хука и функции, которую нужно отключить. Такой подход применяют, если стандартное поведение не подходит для конкретной темы или плагина, например, чтобы убрать стандартный стиль или скрипт.
Какие ошибки чаще всего возникают при работе с хуками?
Частые ошибки связаны с неправильными именами хуков, отсутствием указания аргументов или неправильным приоритетом. Ещё одна распространённая проблема — попытка использовать хук до того, как WordPress его зарегистрировал, что приводит к неисполнению функции. Чтобы избежать этого, важно точно знать момент срабатывания нужного события и корректно указывать параметры подключения.
Что такое хуки в WordPress и зачем они нужны?
Хуки — это специальные точки в коде WordPress, которые позволяют подключать дополнительные функции без изменения ядра системы. С их помощью разработчики могут добавлять новый функционал или изменять существующий. Существуют два вида: action-хуки, которые выполняют определённое действие, и filter-хуки, которые изменяют данные перед выводом или сохранением. Благодаря этому сайт остаётся гибким, а обновления не ломают добавленные изменения.
Как правильно использовать filter-хуки для изменения контента страниц?
Filter-хуки применяются для модификации текста, HTML-кода или других данных перед их выводом на страницу или сохранением в базе. Чтобы использовать такой хук, нужно написать функцию, которая принимает входные данные, изменяет их и возвращает результат. Затем эту функцию привязывают к определённому фильтру с помощью add_filter. Например, можно автоматически добавлять подпись к каждой статье или заменять определённые слова в тексте. При этом важно выбирать правильный хук для конкретного действия и проверять, что функция возвращает корректный формат данных.
