Как использовать хуки и фильтры в создании плагинов WordPress

Хуки (actions) и фильтры (filters) — это фундаментальные механизмы расширения функционала WordPress без изменения исходного кода ядра. Правильное использование хуков и фильтров позволяет создавать мощные и гибкие плагины, которые легко поддерживать и масштабировать.

Что такое хуки и фильтры в WordPress

Хуки — это точки в коде WordPress, где можно «подцепить» свою функцию и выполнить дополнительный код. Они бывают двух типов: actions и filters.

Actions — позволяют выполнить функцию в определённый момент, например, при сохранении поста, загрузке страницы или отправке формы.

Filters — дают возможность изменить данные перед выводом или обработкой. Например, можно изменить заголовок поста или содержимое перед показом пользователю.

Используя хуки и фильтры, разработчик может внедрять свой код в стандартные процессы WordPress без изменения ядра, что обеспечивает стабильность и совместимость.

Использование действий (actions) в плагинах WordPress

Для добавления действия используется функция add_action(). Она принимает два обязательных параметра: имя хука и имя вашей функции. Рассмотрим пример подключения функции к хуку init, который вызывается при инициализации WordPress.

function wpplugin_init_function() {
    // Ваш код инициализации
    error_log('WPPlugin: Инициализация плагина');
}
add_action('init', 'wpplugin_init_function');

В этом примере функция wpplugin_init_function будет вызвана при загрузке WordPress. Это удобно для регистрации кастомных типов записей, таксономий и других задач.

Другой пример — добавление действия при сохранении поста:

function wpplugin_save_post_callback($post_id) {
    // Проверяем, чтобы это не автосохранение
    if (wp_is_post_autosave($post_id)) {
        return;
    }
    // Дополнительные действия при сохранении
    error_log('WPPlugin: Пост сохранён, ID: ' . $post_id);
}
add_action('save_post', 'wpplugin_save_post_callback');

Фильтры: изменение данных перед выводом

Фильтры позволяют перехватывать и изменять данные. Для их подключения используется функция add_filter(). Например, изменим заголовок поста перед отображением:

function wpplugin_filter_the_title($title) {
    return 'WPPlugin: ' . $title;
}
add_filter('the_title', 'wpplugin_filter_the_title');

Теперь ко всем заголовкам постов будет добавляться префикс «WPPlugin:». Это простой способ модифицировать вывод без изменения шаблонов.

Фильтры можно использовать и для более сложных задач, например, изменения содержимого поста, настройки параметров запросов и т.д.

Приоритет и количество аргументов в хуках и фильтрах

При добавлении хуков и фильтров можно указать приоритет выполнения функции и количество принимаемых аргументов. Это важно, когда несколько функций подключены к одному хуку.

Синтаксис:

add_action('hook_name', 'function_name', $priority, $accepted_args);
add_filter('hook_name', 'function_name', $priority, $accepted_args);

По умолчанию $priority равен 10, а количество аргументов — 1.

Пример с приоритетом 20 и двумя аргументами:

function wpplugin_custom_filter($content, $post) {
    // Изменяем содержимое поста
    return $content . '<p>Дополнительный текст для поста ID ' . $post->ID . '</p>';
}
add_filter('the_content', 'wpplugin_custom_filter', 20, 2);

Практическое применение: регистрация кастомного типа записи с использованием хуков

Создадим простой плагин, который регистрирует кастомный тип записи «Отзывы» с помощью действия init:

function wpplugin_register_reviews_post_type() {
    $labels = array(
        'name' => 'Отзывы',
        'singular_name' => 'Отзыв',
        'add_new' => 'Добавить отзыв',
        'add_new_item' => 'Добавить новый отзыв',
        'edit_item' => 'Редактировать отзыв',
        'new_item' => 'Новый отзыв',
        'view_item' => 'Просмотреть отзыв',
        'search_items' => 'Поиск отзывов',
        'not_found' => 'Отзывы не найдены',
        'not_found_in_trash' => 'В корзине отзывы не найдены',
        'menu_name' => 'Отзывы'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'supports' => array('title', 'editor', 'author', 'thumbnail'),
        'show_in_rest' => true
    );
    register_post_type('wpplugin_reviews', $args);
}
add_action('init', 'wpplugin_register_reviews_post_type');

Этот код регистрирует новый тип записи с поддержкой редактора Gutenberg, миниатюр и автора. Благодаря хуку init регистрация происходит на этапе инициализации WordPress.

Советы по отладке и написанию хуков

Для отладки хуков удобно использовать функцию error_log(), чтобы писать сообщения в лог сервера. Это помогает понять, вызывается ли ваша функция, и в каком порядке.

Используйте префиксы в именах функций, чтобы избежать конфликтов с другими плагинами и темами. Например, используйте префикс wpplugin_ для всех своих функций.

Не забывайте проверять условия в функциях, например, исключать автосохранения или проверки nonce, если это необходимо.

Примеры полезных плагинов с расширенным использованием хуков и фильтров

На сайте WPSHOP можно найти ряд плагинов, которые грамотно используют хуки и фильтры для расширения возможностей WordPress. Например:

  • Clearfy Pro — оптимизация и настройка WordPress через фильтры.
  • WPStories — создание интерактивных историй с помощью действий и фильтров.

Изучение их исходного кода поможет лучше понять, как использовать хуки для решения практических задач.

Как удалить неиспользуемые атрибуты продуктов WooCommerce без ошибок
25.09.2026
Автоматическое удаление товаров WooCommerce после отмены заказа
26.09.2026
Оптимизация базы данных WordPress для ускорения сайта
29.09.2026
Как отключить автоматическое обновление WooCommerce без ошибок
23.09.2026
Как добавить автоматический отзыв на страницу товара WooCommerce
02.10.2026