В WordPress хуки — это мощный инструмент, который позволяет изменять поведение сайта без изменения исходного кода ядра или плагинов. Они делятся на два типа: actions (действия) и filters (фильтры). В этой статье мы подробно разберём, как использовать хуки для решения реальных задач на вашем сайте, а также как создавать собственные хуки для расширения функционала.
Что такое хуки в WordPress: actions и filters
Хуки — это точки подключения, в которые можно «впрыснуть» свой код. Actions позволяют выполнять функции в определённые моменты — например, при загрузке страницы или сохранении поста. Filters дают возможность изменить данные перед их выводом или сохранением.
Пример использования action-хука: добавление текста в подвал сайта.
function wpacademy_add_footer_text() {
echo '<p>Спасибо за посещение сайта WP Academy!</p>';
}
add_action('wp_footer', 'wpacademy_add_footer_text');
Фильтры часто применяются для изменения контента. Например, добавим слово «ВАЖНО» в начало каждого заголовка поста:
function wpacademy_filter_post_title($title) {
return 'ВАЖНО: ' . $title;
}
add_filter('the_title', 'wpacademy_filter_post_title');
Практические примеры использования хуков для решения задач
Автоматическое добавление мета-тега в head сайта
Если нужно добавить в раздел <head> сайта мета-тег, например, для верификации сервиса, используем action-хук wp_head:
function wpacademy_add_meta_verification() {
echo '<meta name="google-site-verification" content="ваш_код_верификации" />';
}
add_action('wp_head', 'wpacademy_add_meta_verification');
Это простой способ интеграции с внешними сервисами без правки темы.
Изменение длины отрывка поста через фильтр
По умолчанию WordPress выводит 55 слов в отрывке (excerpt). Изменим это значение на 30 слов:
function wpacademy_custom_excerpt_length($length) {
return 30;
}
add_filter('excerpt_length', 'wpacademy_custom_excerpt_length');
Этот код поможет контролировать длину превью для блога или каталога.
Добавление кастомного поля в административную панель с сохранением через action
Для расширения постов добавим новое поле «Источник» и сохраним его значение:
- Добавим поле на страницу редактирования поста:
function wpacademy_add_custom_meta_box() {
add_meta_box('wpacademy_source_box', 'Источник', 'wpacademy_source_meta_box_html', 'post', 'side');
}
add_action('add_meta_boxes', 'wpacademy_add_custom_meta_box');
function wpacademy_source_meta_box_html($post) {
$value = get_post_meta($post->ID, '_wpacademy_source', true);
echo '<label for="wpacademy_source_field">Источник:</label>';
echo '<input type="text" id="wpacademy_source_field" name="wpacademy_source_field" value="'.esc_attr($value).'" size="25" />';
}
- Сохраним данные при сохранении поста:
function wpacademy_save_source_meta_box_data($post_id) {
if (array_key_exists('wpacademy_source_field', $_POST)) {
update_post_meta(
$post_id,
'_wpacademy_source',
sanitize_text_field($_POST['wpacademy_source_field'])
);
}
}
add_action('save_post', 'wpacademy_save_source_meta_box_data');
Теперь у постов будет дополнительное поле, которое можно использовать в шаблонах.
Создание собственных хуков для расширения функционала
Иногда вам нужно, чтобы в вашем плагине или теме можно было подключать дополнительные функции без правки основного кода. Для этого создают собственные хуки.
Добавление собственного action-хука
Например, в шаблоне темы в нужном месте добавим вызов:
do_action('wpacademy_after_content');
Теперь разработчики смогут добавить вывод, например, блока с рекламой:
function wpacademy_show_ad() {
echo '<div class="ad-block">Реклама здесь</div>';
}
add_action('wpacademy_after_content', 'wpacademy_show_ad');
Таким образом вы делаете код гибким и расширяемым.
Создание собственного фильтра для обработки текста
Добавим фильтр, который позволит другим разработчикам менять приветственное сообщение:
function wpacademy_get_welcome_message() {
$message = 'Добро пожаловать на WP Academy!';
return apply_filters('wpacademy_welcome_message', $message);
}
Если кто-то захочет, он сможет изменить сообщение так:
function change_welcome_text($text) {
return $text . ' Учитесь у лучших!';
}
add_filter('wpacademy_welcome_message', 'change_welcome_text');
Полезные плагины для работы с хуками и дебагом
Для удобной работы с хуками полезно использовать несколько плагинов:
- Query Monitor — помогает видеть, какие хуки срабатывают на странице, и следить за производительностью.
- Debug Bar — добавляет панель с отладочной информацией, включая хуки и запросы к базе.
- Code Snippets — позволяет добавлять пользовательский код с хуками без правки файлов темы или плагина.
Эти инструменты значительно упрощают разработку и отладку.
Рекомендации по использованию хуков для повышения безопасности и производительности
При добавлении кода через хуки следите за безопасностью — используйте функции esc_html(), esc_attr(), sanitize_text_field() для очистки данных. Это предотвратит XSS-атаки и ошибки.
Не перегружайте хуки тяжёлыми операциями или запросами к базе. Если нужна сложная логика, лучше использовать кеширование.
Также рекомендуется давать функциям и хукам уникальные имена с префиксом, например, wpacademy_, чтобы избежать конфликтов с другими плагинами.
Заключение
Хуки — основа гибкости WordPress. Умение правильно использовать actions и filters позволяет безболезненно модифицировать сайт под любые задачи. Создание собственных хуков делает ваш код расширяемым и удобным для других разработчиков. Рекомендуем практиковаться с примерами из статьи, а также изучать документацию WordPress для углубления знаний.