Хуки — фундаментальная часть архитектуры WordPress, позволяющая разработчикам расширять и изменять функциональность ядра, тем и плагинов без прямого изменения исходного кода. Для создания качественных и надёжных плагинов крайне важно понимать, как правильно использовать хуки: actions и filters. В этой статье мы разберёмся, что такое хуки, как их применять, и приведём практические примеры с объяснениями.
Что такое хуки в WordPress: actions и filters
Хуки — это точки в коде WordPress, куда разработчики могут "подцепить" собственные функции. Существует два основных типа хуков:
- Actions (действия) — позволяют выполнять произвольный код в определённый момент времени, например, при загрузке страницы, сохранении поста, и т.д.
- Filters (фильтры) — позволяют изменять данные перед их выводом или использованием, например, изменить содержимое поста, заголовок, или HTML-код.
Использовать хуки нужно через функции add_action и add_filter, которые принимают название хука, имя вашей функции и при необходимости приоритет и количество аргументов.
Пример использования action hook: добавляем сообщение в админку
Рассмотрим простой пример, как с помощью действия admin_notices вывести сообщение в админ-панели WordPress.
function wpcheck_admin_notice() {
echo '<div class="notice notice-success is-dismissible"><p>Плагин WPCheck активирован успешно!</p></div>';
}
add_action('admin_notices', 'wpcheck_admin_notice');В этом примере функция wpcheck_admin_notice добавляет блок с сообщением. Хук admin_notices вызывается WordPress в верхней части страниц админки, поэтому наш код отображается именно там.
Обратите внимание, что функция названа с префиксом wpcheck_ для избежания конфликтов с другими плагинами.
Пример использования filter hook: изменение контента поста
Фильтр the_content позволяет изменить содержимое поста перед его выводом. Например, добавим подпись в конце каждого поста.
function wpcheck_add_signature($content) {
if (is_singular('post')) {
$content .= '<p>— <em>Автор: WPCheck</em></p>';
}
return $content;
}
add_filter('the_content', 'wpcheck_add_signature');В этом коде функция получает текущий контент, проверяет, что мы на странице отдельного поста, и добавляет HTML с подписью. Обязательно возвращаем изменённый контент.
Приоритет и количество аргументов в хуках — тонкости использования
Аргументы функции add_action и add_filter:
$hook_name— имя хука, например,'init','the_content'.$callback— имя вашей функции.$priority— приоритет вызова функции, по умолчанию 10. Чем меньше число, тем раньше вызовется функция.$accepted_args— количество аргументов, которые принимает ваша функция. По умолчанию 1.
Например, если нужно обрабатывать несколько аргументов, стоит указать это явно:
add_filter('some_hook', 'wpcheck_function', 10, 2);Нарушение этих правил может привести к ошибкам и неправильной работе плагина.
Как найти доступные хуки и их описание
Чтобы эффективно работать с хуками, нужно знать, какие они бывают и когда срабатывают. Вот несколько способов:
- Официальная документация WordPress — https://developer.wordpress.org/plugins/hooks/
- Плагины для разработчиков, например, Query Monitor или Simply Show Hooks, которые показывают хуки на странице в реальном времени.
- Исходный код WordPress — поиск вызовов функций
do_actionиapply_filtersв коде ядра.
Знание хуков позволяет создавать плагины, которые работают именно там, где нужно, без опасных вмешательств.
Пример: создание плагина с использованием нескольких хуков
Рассмотрим пример простого плагина, который:
- Выводит уведомление в админке при активации
- Меняет контент поста, добавляя в конце ссылку на сайт
- Логирует сохранение поста в файл
class WPCheck_Hook_Example {
public function __construct() {
add_action('admin_notices', array($this, 'show_admin_notice'));
add_filter('the_content', array($this, 'append_link_to_content'));
add_action('save_post', array($this, 'log_post_save'), 10, 3);
}
public function show_admin_notice() {
echo '<div class="notice notice-info is-dismissible"><p>WPCheck: Плагин работает.</p></div>';
}
public function append_link_to_content($content) {
if (is_singular('post')) {
$content .= '<p><a href="https://wpcheck.ru" target="_blank">Посетите WPCheck.ru</a></p>';
}
return $content;
}
public function log_post_save($post_ID, $post, $update) {
$log = sprintf("[%s] Пост ID %d сохранён. Обновление: %s\n", date('Y-m-d H:i:s'), $post_ID, $update ? 'Да' : 'Нет');
error_log($log, 3, __DIR__ . '/wpcheck_post_log.txt');
}
}
new WPCheck_Hook_Example();В этом коде мы видим как несколько хуков объединяются для разных задач. Такой подход помогает писать модульный и легко поддерживаемый код.
Рекомендации по безопасности и производительности при работе с хуками
При использовании хуков важно соблюдать несколько правил:
- Используйте префиксы в названиях функций, чтобы избежать конфликтов.
- Не перегружайте хуки тяжёлыми операциями — это может замедлить сайт.
- Проверяйте условия внутри функций, чтобы код выполнялся только там, где нужно.
- Используйте возможности отписки —
remove_actionиremove_filterдля управления поведением.
Соблюдение этих правил сделает ваш плагин стабильным и безопасным.
Заключение: хуки — ключ к расширяемости WordPress
Понимание и правильное использование хуков — залог успешной разработки плагинов и тем. Это даёт гибкость, позволяет интегрироваться с ядром и сторонними расширениями без риска сломать что-то при обновлениях.
Осваивайте хуки, экспериментируйте с действиями и фильтрами, и вы сможете создавать по-настоящему мощные и надёжные решения для WordPress.