Как использовать хуки и фильтры в создании плагинов 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 — создание интерактивных историй с помощью действий и фильтров.

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

Как добавить AJAX в WordPress плагин: подробное руководство
20.11.2025
Автоматическая регистрация пользователей с подтверждением по email в WordPress
26.12.2025
Как сделать постоянный AJAX запрос без кэширования в WordPress
10.12.2025
Удаление редко используемых полей продукта WooCommerce
26.02.2026
Как избежать конфликтов между плагинами WordPress
03.01.2026