В WordPress хуки — это мощный инструмент, позволяющий разработчикам вмешиваться в работу ядра, тем и плагинов без изменения их исходного кода. С помощью хуков можно добавлять, изменять или удалять функциональность, что делает систему максимально гибкой. В этой статье мы подробно разберём, как использовать хук-API WordPress, чем отличаются actions и filters, и приведём примеры кода, которые помогут вам быстро внедрять свои доработки.
Что такое хуки в WordPress и зачем они нужны
Хуки — это точки соединения (события), которые WordPress вызывает в определённые моменты своей работы. С помощью хуков можно:
- Добавлять свой код без правки ядра или темы.
- Изменять вывод или данные, которые генерирует WordPress.
- Расширять функциональность плагинов и тем.
Два основных типа хуков:
- Actions (Действия) — позволяют выполнить какую-то функцию в заданный момент (например, при сохранении поста).
- Filters (Фильтры) — позволяют изменить данные перед их выводом или сохранением (например, модифицировать содержимое поста).
Используемые функции для работы с хуками:
add_action()— добавляет функцию к действию.add_filter()— добавляет функцию к фильтру.remove_action()иremove_filter()— удаляют ранее добавленные функции.
Как использовать Actions для расширения функционала WordPress
Actions запускают ваши функции в определённые моменты. Например, вы хотите добавить сообщение в админ-панель после обновления поста.
Пример использования action-хука save_post для отправки уведомления:
function wpdo_send_post_update_notice( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
error_log( 'Пост с ID ' . $post_id . ' был обновлён.' );
}
add_action( 'save_post', 'wpdo_send_post_update_notice' );Здесь функция wpdo_send_post_update_notice срабатывает каждый раз при сохранении поста и пишет в лог ID обновлённого поста (кроме ревизий). Это простой пример, но на его основе можно строить отправку email, обновление внешних данных, работу с кэшем и многое другое.
Ещё один полезный action — wp_enqueue_scripts, позволяющий добавить свои CSS и JS файлы:
function wpdo_add_custom_scripts() {
wp_enqueue_style( 'wpdo-style', get_stylesheet_directory_uri() . '/css/wpdo-style.css' );
wp_enqueue_script( 'wpdo-script', get_template_directory_uri() . '/js/wpdo-script.js', array('jquery'), '1.0', true );
}
add_action( 'wp_enqueue_scripts', 'wpdo_add_custom_scripts' );Этот код подключит стили и скрипты, обеспечив их корректную загрузку в шаблоне.
Фильтры (Filters) — изменение данных WordPress перед выводом
Filters позволяют перехватывать данные, изменять их и возвращать обратно. Это удобно для модификации контента, заголовков, выводимых данных и т.д.
Рассмотрим пример изменения заголовка поста с помощью фильтра the_title:
function wpdo_modify_post_title( $title ) {
return 'WPDO: ' . $title;
}
add_filter( 'the_title', 'wpdo_modify_post_title' );Теперь к каждому заголовку поста будет добавляться префикс «WPDO:». Это простой способ добавить дополнительную информацию или стилизацию.
Другой пример — фильтр the_content, который позволяет добавить текст в конец содержимого поста:
function wpdo_append_to_content( $content ) {
if ( is_single() ) {
$content .= '<p>Спасибо за прочтение! Подписывайтесь на новости.</p>';
}
return $content;
}
add_filter( 'the_content', 'wpdo_append_to_content' );Этот код добавит призыв к подписке после текста каждой отдельной записи.
Параметры хуков: приоритет и количество аргументов
Функции add_action и add_filter принимают несколько параметров:
$hook_name— имя хука;$callback— функция-обработчик;$priority— приоритет выполнения (по умолчанию 10, меньше значение — раньше вызывается);$accepted_args— сколько аргументов передать в функцию (по умолчанию 1).
Например, если нужно использовать больше данных из хука, укажите это явно:
function wpdo_example_action( $arg1, $arg2 ) {
// работа с двумя аргументами
}
add_action( 'some_hook', 'wpdo_example_action', 10, 2 );<Корректное указание количества аргументов важно, иначе вы не получите нужные данные и функция не будет работать как ожидается.
Практические советы для работы с хуками в WordPress
1. Всегда используйте префиксы в именах функций
Чтобы избежать конфликтов с функциями других плагинов или тем, добавляйте префикс, связанный с вашим проектом, например, wpdo_.
2. Проверяйте контекст выполнения
Многие хуки запускаются в разных местах — проверяйте условия, такие как is_admin() или is_single(), чтобы код выполнялся только там, где нужно.
3. Не забывайте удалять хуки при необходимости
Если нужно временно отключить функцию, используйте remove_action() или remove_filter(). Это удобно для отладки и кастомизации.
4. Используйте дебаггер и логи
Для отладки хуков полезно писать в лог или использовать плагины для отладки, чтобы видеть, когда и с какими параметрами вызывается ваш код.
Пример: создание собственного action-хука в плагине WPDO
Иногда нужно не только использовать готовые хуки, но и создавать свои, чтобы расширять свои плагины или темы. Вот пример, как это сделать:
function wpdo_custom_process() {
// некоторая логика
do_action( 'wpdo_after_custom_process' );
}
// Подписка на собственный хук
function wpdo_handler_after_process() {
error_log( 'Хук wpdo_after_custom_process сработал' );
}
add_action( 'wpdo_after_custom_process', 'wpdo_handler_after_process' );В этом примере после выполнения функции wpdo_custom_process вызывается собственный action-хук wpdo_after_custom_process. Другие разработчики могут подключать свои функции к этому событию.
Заключение: использование хуков — ключ к гибкости WordPress
Хуки — это основа расширяемости WordPress. Освоив их, вы сможете создавать мощные, лёгкие в сопровождении и расширяемые решения. Важно практиковаться, читать документацию и избегать прямого редактирования ядра, полагаясь именно на хуки для внедрения изменений.