Что такое хуки в WordPress и зачем они нужны
Хуки в WordPress — это специальные точки в коде, которые позволяют разработчикам «встраивать» свою логику без изменения исходных файлов ядра. Благодаря хукам можно добавлять, изменять или удалять функционал тем и плагинов, не нарушая обновляемость сайта.
Существует два основных типа хуков: actions и filters. Actions позволяют выполнять собственный код в определённые моменты, а filters — изменять данные перед их выводом или сохранением.
Использование хуков — обязательный навык для любого разработчика на WordPress, так как это основа расширяемости и кастомизации.
Разница между actions и filters: основные понятия
Что такое Action-хуки
Action-хуки вызываются в определённые моменты выполнения WordPress, например, при загрузке страницы, сохранении записи, создании меню и т.п. Они не возвращают значения, а просто выполняют код.
Пример использования action для добавления блока в футер сайта:
add_action('wp_footer', 'wpdirect_add_footer_text');
function wpdirect_add_footer_text() {
echo '<p>Спасибо, что посетили наш сайт!</p>';
}Что такое Filter-хуки
Filter-хуки позволяют изменять данные до их вывода или сохранения. Они принимают значение, изменяют его и возвращают обратно.
Пример фильтра для изменения заголовка записи:
add_filter('the_title', 'wpdirect_modify_post_title');
function wpdirect_modify_post_title($title) {
return 'WPDirect: ' . $title;
}Как правильно создавать свои хуки в плагинах и темах
Если вы разрабатываете плагин или тему, создание собственных хуков расширит возможности кастомизации вашего кода другими разработчиками.
Для объявления собственного action-хука используйте функцию do_action(). Например:
do_action('wpdirect_before_content');В другом месте можно подключить обработчик:
add_action('wpdirect_before_content', 'wpdirect_custom_message');
function wpdirect_custom_message() {
echo '<p>Это сообщение выводится перед контентом.</p>';
}Для фильтров используйте apply_filters():
$content = apply_filters('wpdirect_filter_content', $content);Так вы даёте другим возможность изменить переменную $content перед её использованием.
Примеры использования хуков для решения типичных задач
Добавление пользовательского CSS в заголовок сайта
Иногда требуется добавить кастомный стиль без изменения файлов темы. Используем action-хук wp_head:
add_action('wp_head', 'wpdirect_custom_css');
function wpdirect_custom_css() {
echo '<style>body {background-color: #f5f5f5;}</style>';
}Фильтрация контента для удаления определённых слов
Если нужно автоматически менять или удалять слова из контента, используем filter-хук the_content:
add_filter('the_content', 'wpdirect_filter_bad_words');
function wpdirect_filter_bad_words($content) {
$bad_words = ['плохое', 'запрещенное'];
return str_ireplace($bad_words, '***', $content);
}Автоматическое добавление ссылки на авторизацию в меню
Для динамического изменения меню можно использовать filter-хук wp_nav_menu_items:
add_filter('wp_nav_menu_items', 'wpdirect_add_login_link', 10, 2);
function wpdirect_add_login_link($items, $args) {
if ($args->theme_location == 'primary') {
if (is_user_logged_in()) {
$items .= '<li><a href="' . wp_logout_url() . '">Выйти</a></li>';
} else {
$items .= '<li><a href="' . wp_login_url() . '">Войти</a></li>';
}
}
return $items;
}Советы по отладке и оптимизации хуков
Иногда хуки не срабатывают как ожидается. Для отладки советую использовать функции error_log() внутри ваших функций, чтобы отслеживать вызовы.
Не забывайте про приоритет выполнения функции, он задаётся третьим параметром, например:
add_action('init', 'wpdirect_init_function', 20);Чем ниже число, тем раньше вызывается хук. Это важно, когда несколько функций работают с одним хуком.
Оптимизируйте функции, подключённые к хукам, чтобы они не замедляли загрузку страниц. Избегайте долгих операций внутри хуков.
Полезные плагины для работы с хуками в WordPress
Plugin Organizer
Позволяет управлять порядком загрузки плагинов, что влияет на работу хуков.
Code Snippets
Удобный интерфейс для добавления и управления пользовательскими хуками без редактирования functions.php.
Hook Me Up
Показывает список всех доступных хуков на странице, что помогает быстро находить нужные точки для вмешательства.