В разработке под WordPress хуки — это один из самых мощных механизмов, позволяющих изменять и расширять поведение ядра, тем и плагинов без изменения их исходного кода. В этой статье мы подробно разберём, что такое хуки, какие бывают их типы, и как правильно использовать их для решения конкретных задач.
Что такое хуки в WordPress и зачем они нужны
Хуки — это точки в коде WordPress, в которых можно «подцепить» свою функцию и изменить или дополнить стандартное поведение. Они позволяют внедрять собственный код без правки исходников, что очень важно для обновляемости и безопасности.
Всего существует два основных типа хуков: actions и filters. Actions выполняют код в определённый момент, а filters изменяют данные перед их выводом или сохранением.
Использование хуков — это основа написания плагинов и тем, ведь они дают гибкость и контроль над процессами в WordPress.
Разница между actions и filters: практические примеры
Actions — это события, к которым можно привязать функцию. Например, при публикации поста, загрузке страницы, сохранении настроек и т.д. Ваша функция выполнится в нужный момент.
Filters позволяют перехватить данные, изменить их и вернуть обратно. Например, текст поста, заголовок, контент виджетов и другие элементы можно отредактировать через фильтр.
Пример использования action-хука
Добавим сообщение в админ-панель после сохранения поста:
function wordpressa_post_save_notice($post_id) {
if (get_post_type($post_id) === 'post') {
add_action('admin_notices', function() {
echo '<div class="notice notice-success is-dismissible">Пост успешно сохранён!</div>';
});
}
}
add_action('save_post', 'wordpressa_post_save_notice');Эта функция добавляет уведомление в админку, когда пост сохраняется.
Пример использования filter-хука
Изменим заголовок поста, добавив префикс:
function wordpressa_filter_post_title($title) {
return '[ВАЖНО] ' . $title;
}
add_filter('the_title', 'wordpressa_filter_post_title');Этот фильтр добавит текст в начало каждого заголовка поста на сайте.
Как найти и использовать хуки в WordPress: советы и инструменты
Чтобы использовать хуки, нужно знать их имена и моменты срабатывания. К счастью, WordPress имеет обширную документацию в Codex и Developer Handbook, где перечислены стандартные хуки.
Для поиска хуков в коде можно использовать IDE с поиском по проекту, или специальные плагины, например, Query Monitor и Debug Bar, которые показывают активные хуки и порядок их выполнения.
Ещё один полезный инструмент — плагин Simply Show Hooks, который визуально выводит все хуки на странице, что помогает понять, где и какие хуки можно применить.
Практические задачи и примеры использования хуков
Добавление пользовательского поля к форме комментариев через хуки
Иногда нужно расширить форму комментариев дополнительным полем. Это удобно делать через action-хук comment_form_after_fields:
function wordpressa_add_custom_comment_field() {
echo '<p class="comment-form-phone"><label for="phone">Телефон</label><input id="phone" name="phone" type="text" size="30" /></p>';
}
add_action('comment_form_after_fields', 'wordpressa_add_custom_comment_field');Чтобы сохранить это поле, нужно использовать action preprocess_comment:
function wordpressa_save_comment_phone($commentdata) {
if (isset($_POST['phone'])) {
$commentdata['comment_content'] .= '\nТелефон: ' . sanitize_text_field($_POST['phone']);
}
return $commentdata;
}
add_filter('preprocess_comment', 'wordpressa_save_comment_phone');Изменение шаблона вывода контента с помощью фильтров
Допустим, нужно автоматически добавлять подпись в конце каждого поста. Для этого используем фильтр the_content:
function wordpressa_append_signature($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$signature = '<p>— Автор статьи, wordpressa.ru</p>';
return $content . $signature;
}
return $content;
}
add_filter('the_content', 'wordpressa_append_signature');Рекомендации по написанию собственных хуков в своих плагинах и темах
Если вы создаёте плагин или тему, не забывайте о том, что ваши функции должны быть гибкими. Важно создавать собственные хуки, чтобы другие разработчики могли расширять ваш функционал.
Для создания action-хука используйте функцию do_action('hook_name', $args);, а для фильтра — apply_filters('hook_name', $value, $args);.
function wordpressa_custom_function() {
$data = 'Исходные данные';
$data = apply_filters('wordpressa_custom_filter', $data);
do_action('wordpressa_custom_action', $data);
}Таким образом, другие разработчики смогут подключаться к вашим хукам, изменять поведение вашего кода без правки исходников.
Заключение
Хуки — фундаментальный инструмент для любого разработчика на WordPress. Их грамотное использование позволяет создавать расширяемый, поддерживаемый и гибкий код. Надеюсь, приведённые примеры и рекомендации помогут вам лучше понять и использовать хуки в своих проектах.