Хуки (hooks) — один из ключевых механизмов расширения функционала WordPress, который позволяет разработчикам внедрять собственный код без изменения исходных файлов ядра и тем. Они делятся на два типа: actions и filters. Разберёмся, как правильно использовать хуки на практике, чтобы создавать надёжные и устойчивые к обновлениям решения.
Что такое хуки в WordPress и зачем они нужны
Хуки — это точки внедрения кода, которые WordPress запускает в определённые моменты жизни сайта. Actions позволяют выполнять дополнительные действия (например, отправить письмо после публикации записи), а filters — изменять данные (например, изменить заголовок записи перед выводом).
Важно понимать, что хуки позволяют избежать изменения исходного кода, что значительно упрощает поддержку сайта в будущем и снижает риск ошибок при обновлениях.
Стандартный синтаксис добавления хука выглядит так:
add_action('hook_name', 'wordpressy_my_custom_function');
function wordpressy_my_custom_function() {
// Ваш код
}Обратите внимание на префикс wordpressy_ в имени функции — это хорошая практика, чтобы избежать конфликтов с другими плагинами и темами.
Практические примеры использования Actions
Добавление произвольного текста после контента записи
Предположим, вам нужно добавить свой текст или HTML после содержимого каждой записи. Для этого используем action the_content через фильтр:
add_filter('the_content', 'wordpressy_add_custom_text_after_content');
function wordpressy_add_custom_text_after_content($content) {
if (is_single()) {
$custom_text = '<p>Спасибо за прочтение! Подписывайтесь на наши обновления.</p>';
return $content . $custom_text;
}
return $content;
}В этом примере мы используем фильтр, чтобы добавить текст только на странице отдельной записи.
Отправка письма администратору при публикации новой записи
Для выполнения действия при событии публикации записи используем action publish_post:
add_action('publish_post', 'wordpressy_notify_admin_on_new_post');
function wordpressy_notify_admin_on_new_post($post_ID) {
$post = get_post($post_ID);
$admin_email = get_option('admin_email');
$subject = 'Новая запись опубликована';
$message = 'Опубликована новая запись: ' . $post->post_title . '\n' . get_permalink($post_ID);
wp_mail($admin_email, $subject, $message);
}Таким образом, администратор получит уведомление на почту сразу после публикации записи.
Фильтры: как изменять данные WordPress
Замена стандартного заголовка на динамический
Если нужно динамически изменить заголовок страницы, можно использовать фильтр the_title:
add_filter('the_title', 'wordpressy_dynamic_title', 10, 2);
function wordpressy_dynamic_title($title, $id) {
if (is_singular('post') && in_the_loop() && !is_admin()) {
$title .= ' - Эксклюзив от WordPressy';
}
return $title;
}Таким образом, к заголовку всех постов добавится суффикс.
Изменение количества слов в отрывке (excerpt)
По умолчанию WordPress выводит 55 слов в отрывке. С помощью фильтра excerpt_length можно настроить это значение:
add_filter('excerpt_length', 'wordpressy_custom_excerpt_length', 999);
function wordpressy_custom_excerpt_length($length) {
return 30; // 30 слов
}Это полезно для кастомизации внешнего вида блога.
Советы по работе с хуками в WordPress
Используйте префиксы в именах функций
Чтобы избежать конфликтов с другими плагинами и темами, всегда добавляйте уникальный префикс к вашим функциям, как в примерах выше wordpressy_. Это хорошая практика при разработке.
Соблюдайте правильные приоритеты и количество аргументов
При добавлении хуков всегда указывайте приоритет и количество аргументов, если это необходимо. Например:
add_filter('hook_name', 'wordpressy_function', 20, 2);Чем ниже число приоритета, тем раньше сработает функция. По умолчанию приоритет 10.
Отсоединение хуков
Иногда нужно отключить стандартное поведение WordPress или плагинов. Для этого используют remove_action или remove_filter. Например:
remove_action('wp_head', 'wp_generator');Этот код удалит мета-тег версии WordPress из <head>, что полезно для безопасности.
Интеграция хуков с популярными плагинами
Если вы используете плагины с сайта WPSHOP.RU, хуки помогут расширить их функционал. Например, для плагина My Popup можно через action добавить показ всплывающего окна после загрузки страницы:
add_action('wp_footer', 'wordpressy_show_mypopup');
function wordpressy_show_mypopup() {
if (function_exists('mypopup_show')) {
mypopup_show();
}
}Таким образом, можно программно управлять поведением плагина без ручной настройки.
Выводы и рекомендации
Хуки — мощный и гибкий инструмент для расширения WordPress. Используйте actions для запуска функций в нужный момент и filters для модификации данных. Всегда придерживайтесь хороших практик именования и учитывайте приоритеты, чтобы избежать конфликтов.
Благодаря хукам вы создадите устойчивые и легко поддерживаемые решения, которые не сломаются при обновлении ядра или плагинов.