Что такое хуки и фильтры в WordPress — базовые понятия
В WordPress хуки (hooks) — это специальные точки в коде системы, которые позволяют разработчикам подключать свои функции или менять поведение сайта без правки ядра. Это основа расширяемости CMS. Существует два основных типа хуков: действия (actions) и фильтры (filters).
Действия (actions) позволяют выполнить дополнительный код в определённый момент, например, после загрузки поста, отправки формы, инициализации темы. Фильтры (filters) дают возможность изменить данные перед их выводом или сохранением. Это мощный инструмент для кастомизации и оптимизации. Понимание работы хуков — обязательный навык для любого разработчика WordPress.
Использование хуков позволяет избежать прямого редактирования файлов системы, что упрощает обновления и поддержку сайта.
Как использовать add_action и add_filter — примеры для практики
Для подключения функции к хуку применяется функция add_action для действий и add_filter для фильтров. Важно правильно указать название хука и приоритет выполнения.
Пример подключения действия, выводящего сообщение внизу каждой статьи:
function wp_course_show_message() {
echo '<p>Спасибо за прочтение!</p>';
}
add_action('the_content', 'wp_course_show_message');Однако здесь лучше использовать фильтр the_content, чтобы модифицировать содержимое поста, а не просто выводить после. Пример с фильтром:
function wp_course_append_thanks_message($content) {
if (is_single()) {
$content .= '<p>Спасибо за прочтение!</p>';
}
return $content;
}
add_filter('the_content', 'wp_course_append_thanks_message');Здесь мы меняем содержимое поста, добавляя благодарственное сообщение только на странице одиночного поста. Фильтры всегда принимают и возвращают значение, поэтому забывать return нельзя.
Создание собственных хуков и фильтров — расширяем возможности плагина или темы
Иногда нужно не только использовать существующие хуки, но и создавать свои, чтобы дать возможность другим разработчикам подключаться к вашему коду.
Создание собственного действия (action):
do_action('wp_course_custom_action', $arg1, $arg2);Где wp_course_custom_action — уникальное название вашего хука. Чтобы к нему подключиться, другой код вызовет:
add_action('wp_course_custom_action', 'my_custom_function', 10, 2);
function my_custom_function($arg1, $arg2) {
// код обработки
}Создание собственного фильтра:
$value = apply_filters('wp_course_custom_filter', $value, $arg1);И подключение к фильтру:
add_filter('wp_course_custom_filter', 'my_filter_function', 10, 2);
function my_filter_function($value, $arg1) {
// изменить и вернуть $value
return $value;
}Создание собственных хуков позволяет строить модульную архитектуру плагинов и тем, облегчая их поддержку и расширение.
Практические задачи с хуками — примеры из реальных кейсов
Добавление пользовательских мета-полей к записи через action
Часто нужно добавить дополнительные данные к посту при сохранении. Для этого используют хук save_post:
function wp_course_save_custom_meta($post_id) {
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (isset($_POST['wp_course_custom_field'])) {
update_post_meta($post_id, '_wp_course_custom_field', sanitize_text_field($_POST['wp_course_custom_field']));
}
}
add_action('save_post', 'wp_course_save_custom_meta');Этот код сохраняет пользовательское поле из формы редактирования поста. Добавить соответствующий input в форму можно через другой action — edit_form_after_title или add_meta_boxes.
Изменение заголовка поста через фильтр the_title
Иногда требуется динамически менять заголовок, например, добавлять префикс или суффикс:
function wp_course_modify_post_title($title, $id=null) {
if (is_single($id)) {
$title = '🔥 ' . $title . ' 🔥';
}
return $title;
}
add_filter('the_title', 'wp_course_modify_post_title', 10, 2);Этот фильтр добавит огненные эмодзи вокруг заголовка на странице одиночного поста.
Советы по отладке и безопасности при работе с хуками
При работе с хуками важно соблюдать несколько правил для безопасности и надежности:
- Используйте уникальные префиксы для названий своих функций и хуков, например,
wp_course_, чтобы избежать конфликтов. - Проверяйте права пользователя и nonce для защиты от CSRF при сохранении данных.
- В фильтрах всегда возвращайте изменённое значение — иначе можно сломать вывод.
- Для отладки используйте функции
error_log()или расширения типа Query Monitor. - Не перегружайте хуки тяжелыми запросами или длительными операциями — это замедлит сайт.
Следуя этим рекомендациям, вы создадите стабильные и безопасные расширения для WordPress.
Заключение
Хуки и фильтры — краеугольный камень разработки под WordPress. Освоив их, вы сможете гибко настраивать и расширять функционал сайта без правки ядра. В статье приведены практические примеры, которые помогут вам быстро начать использовать хуки в своих проектах на wp-course.ru.