Хуки — одна из самых мощных возможностей WordPress, позволяющая изменять поведение ядра, тем и плагинов без правки исходных файлов. Они делятся на два типа: actions и filters. В этой статье мы подробно разберём, как использовать хуки для расширения функционала сайта, приведём примеры и расскажем о лучших практиках.
Что такое хуки в WordPress: actions и filters
Хук — это точка в коде WordPress, куда можно «подцепить» свою функцию. Actions позволяют выполнить дополнительный код в определённый момент (например, при сохранении поста), а filters дают возможность изменить данные до того, как они будут выведены или сохранены.
Понимание разницы между ними критично. Actions — это события, filters — изменения данных. Например, action wpbook_save_post можно использовать для отправки уведомления после сохранения записи, а filter wpbook_the_content — чтобы изменить содержимое записи перед выводом.
Для подключения своих функций к хукам используются функции add_action и add_filter. Они принимают имя хука, имя вашей функции и приоритет выполнения.
Пример: добавление действия через action hook
Допустим, нужно отправлять лог при публикации поста. Создадим функцию и подключим её к хуку publish_post:
function wpbook_log_post_published($post_ID) {
error_log('Пост с ID ' . $post_ID . ' был опубликован');
}
add_action('publish_post', 'wpbook_log_post_published');Теперь при публикации любого поста в лог будет записываться сообщение с ID поста.
Как правильно создавать свои хуки в плагинах и темах
Чтобы обеспечить гибкость своего кода, разработчикам стоит создавать собственные хуки. Это позволит другим расширять ваш функционал без правки исходников.
Для создания собственного action используется функция do_action('hook_name', $arg1, $arg2), а для фильтра — apply_filters('hook_name', $value). Ниже пример создания собственного фильтра:
function wpbook_get_greeting_message($name) {
$message = 'Привет, ' . $name . '! Добро пожаловать на WPBook.';
return apply_filters('wpbook_greeting_message', $message, $name);
}Другие разработчики могут изменить сообщение, подключившись к фильтру wpbook_greeting_message и изменив текст.
Пример подключения к вашему фильтру
function custom_greeting($message, $name) {
return $message . ' Сегодня отличный день для изучения WordPress!';
}
add_filter('wpbook_greeting_message', 'custom_greeting', 10, 2);Таким образом, использование собственных хуков делает код более модульным и расширяемым.
Практические примеры использования хуков в WordPress
1. Изменение контента записи с помощью фильтра
Допустим, нужно добавить в конец каждого поста подпись с автором. Для этого используем фильтр the_content:
function wpbook_add_author_signature($content) {
if(is_single()) {
$author = get_the_author();
$signature = '<p>— Автор: ' . esc_html($author) . '</p>';
return $content . $signature;
}
return $content;
}
add_filter('the_content', 'wpbook_add_author_signature');Этот код автоматически добавит подпись с именем автора в конце каждой отдельной записи.
2. Добавление пользовательского поля при сохранении записи через action
Можно автоматически добавлять мета-данные к посту при его сохранении. Например, отметим дату последнего изменения в специальном поле:
function wpbook_save_last_modified_date($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id)) return;
update_post_meta($post_id, '_wpbook_last_modified', current_time('mysql'));
}
add_action('save_post', 'wpbook_save_last_modified_date');Теперь в мета-полях каждого поста будет храниться время последнего сохранения.
3. Отключение определённых скриптов с помощью фильтра
Иногда нужно условно отключить загрузку скриптов для оптимизации. Пример использования фильтра wp_enqueue_scripts:
function wpbook_dequeue_scripts() {
if (is_front_page()) {
wp_dequeue_script('some-plugin-script');
}
}
add_action('wp_enqueue_scripts', 'wpbook_dequeue_scripts', 100);Этот код отключит скрипт some-plugin-script только на главной странице, что может ускорить загрузку.
Лучшие практики работы с хуками в WordPress
Чтобы избежать конфликтов и обеспечить стабильность сайта, придерживайтесь следующих рекомендаций:
- Используйте префиксы в названиях своих функций и хуков (например,
wpbook_), чтобы избежать коллизий. - Всегда проверяйте контекст выполнения, например, с помощью
is_admin(),is_single()и других условных тегов. - Пишите функции с возможностью повторного использования и с правильной обработкой аргументов.
- Документируйте свои хуки и функции, чтобы коллеги понимали их назначение.
- Не изменяйте исходный код ядра, тем и плагинов — используйте хуки для расширения функционала.
Заключение
Хуки — это сердце расширяемости WordPress. Освоив работу с actions и filters, вы сможете создавать мощные и гибкие решения, которые легко адаптируются под любые задачи. Приведённые примеры помогут быстро начать использовать хуки в своих проектах на wpbook.ru и сделать ваш сайт лучше.