В WordPress хуки — это одна из самых мощных и гибких функций, позволяющая изменять поведение сайта без изменения исходного кода ядра или плагинов. Если вы хотите создавать кастомные решения, расширять функционал темы или плагинов, понимание хуков обязательно.
Что такое Hooks в WordPress: action и filter
Hooks делятся на два основных типа: actions и filters. Actions позволяют выполнить определенный код в заданный момент — например, при сохранении поста или загрузке страницы. Filters дают возможность изменить данные перед их выводом или сохранением.
Например, action-хук save_post срабатывает при сохранении записи, а filter-хук the_content позволяет изменить содержимое поста перед выводом.
Функция подключения к хуку выглядит так:
add_action('hook_name', 'wpreboot_my_function');
function wpreboot_my_function() {
// код
}Здесь wpreboot_my_function — это ваша функция, которую мы рекомендуем именовать с префиксом домена для уникальности.
Практические примеры использования Action Hooks
Рассмотрим конкретные задачи, которые часто встречаются при разработке.
Добавление сообщения в админ-панель после сохранения записи
Допустим, нужно вывести уведомление после сохранения поста. Используем хук save_post:
add_action('save_post', 'wpreboot_show_admin_notice');
function wpreboot_show_admin_notice($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (!current_user_can('edit_post', $post_id)) return;
add_action('admin_notices', function() {
echo '<div class="notice notice-success is-dismissible">\n';
echo '<p>Пост успешно сохранён!</p>\n';
echo '</div>';
});
}Обратите внимание на проверку прав и автосохранения — это важно для безопасности и избежания повторных срабатываний.
Автоматическое добавление мета-данных при публикации
Если нужно при публикации автоматически добавить или обновить мета-поле записи:
add_action('publish_post', 'wpreboot_set_default_meta');
function wpreboot_set_default_meta($post_id) {
if (!metadata_exists('post', $post_id, '_wpreboot_custom_meta')) {
update_post_meta($post_id, '_wpreboot_custom_meta', 'default value');
}
}Такой подход позволяет централизованно управлять дополнительными данными.
Используем Filter Hooks для изменения вывода контента
Filters позволяют изменить данные перед выводом. Это очень удобно для добавления собственного текста, корректировки ссылок и других задач.
Добавление подписи к каждому посту
Чтобы в конце каждого поста автоматически добавлять подпись:
add_filter('the_content', 'wpreboot_add_signature_to_content');
function wpreboot_add_signature_to_content($content) {
if (is_single() && in_the_loop() && is_main_query()) {
$signature = '<p>— Автор: wpreboot.ru</p>';
return $content . $signature;
}
return $content;
}Важно проверять, что фильтр срабатывает в нужном месте, чтобы не добавлять подпись в списках или виджетах.
Изменение заголовка страниц
Иногда нужно изменить заголовок динамически. Используем фильтр the_title:
add_filter('the_title', 'wpreboot_modify_title');
function wpreboot_modify_title($title) {
if (is_admin()) return $title; // не меняем в админке
return 'WPReboot: ' . $title;
}Такая простая функция помогает улучшить узнаваемость бренда на сайте.
Полезные плагины для работы с хуками
Для изучения и тестирования хуков рекомендую несколько плагинов:
- Query Monitor — показывает все хуки, которые срабатывают на странице, позволяет отслеживать ошибки и запросы к базе.
- Hook Me Up — визуально отображает список хуков в текущем запросе.
- Code Snippets — удобный менеджер для добавления пользовательских функций без правки файла functions.php.
Использование этих инструментов существенно ускорит отладку и поможет лучше понять, как работают хуки.
Рекомендации по написанию функций для хуков
При работе с хуками всегда придерживайтесь следующих правил:
- Именуйте функции с уникальным префиксом, например,
wpreboot_, чтобы избежать конфликтов. - Проверяйте права доступа, чтобы не выполнять критичные операции для неподходящих пользователей.
- Используйте приоритет и количество аргументов при подключении к хуку:
add_action('hook', 'func', 10, 2);— это позволяет более гибко управлять порядком срабатывания. - Не забывайте удалять хуки, если функция больше не нужна, например,
remove_action('hook', 'func');.
Заключение: почему важно знать хуки
Понимание хуков — ключ к расширению и кастомизации WordPress без прямого редактирования ядра и тем. Это основа для создания стабильных, масштабируемых и легко поддерживаемых решений. Начните с простых примеров, постепенно переходя к более сложным сценариям, и вы быстро увидите, насколько гибкой и мощной может быть ваша разработка.
Если вы хотите глубже изучить хуки, рекомендую официальную документацию на developer.wordpress.org и практиковаться с кодом на тестовом сайте.