Хуки (Hooks)
Хуки (Hooks) — это один из самых мощных механизмов в WordPress, позволяющий разработчикам изменять или расширять функциональность ядра, тем и плагинов без необходимости редактирования исходного кода. Хуки делятся на два типа: Actions (действия) и Filters (фильтры). Давайте разберем их подробно с примерами.
1. Actions (Действия)
Actions позволяют выполнять код в определенный момент работы WordPress. Они не возвращают значения, а просто «цепляются» к определенным событиям.
Как работает Action:
- WordPress выполняет определенное действие (например, загрузка страницы, сохранение поста).
- Если к этому действию привязаны функции через
add_action()
, они выполняются.
Пример использования Action:
Допустим, вы хотите добавить текст в подвал сайта. Для этого можно использовать хук wp_footer
:
function my_custom_footer_text() {
echo '<p>Спасибо за посещение нашего сайта!</p>';
}
add_action('wp_footer', 'my_custom_footer_text');
В этом примере:
wp_footer
— это хук, который срабатывает перед закрывающим тегом</body>
.my_custom_footer_text
— функция, которая выполняется при срабатывании хука.
2. Filters (Фильтры)
Filters позволяют изменять данные перед их выводом или использованием. В отличие от Actions, Filters всегда возвращают значение.
Как работает Filter:
- WordPress передает данные через фильтр (например, заголовок поста).
- Если к этому фильтру привязаны функции через
add_filter()
, они могут изменить данные. - Измененные данные возвращаются обратно.
Пример использования Filter:
Допустим, вы хотите добавить текст «Избранное» к заголовкам всех постов:
function modify_post_title($title) {
return $title . ' - Избранное';
}
add_filter('the_title', 'modify_post_title');
В этом примере:
the_title
— это хук, который фильтрует заголовок поста.modify_post_title
— функция, которая изменяет заголовок.
3. Параметры хуков
И Actions, и Filters могут принимать дополнительные параметры. Например:
Пример с параметрами:
Хук wp_footer
может принимать приоритет и количество аргументов:
add_action('wp_footer', 'my_custom_footer_text', 10, 2);
- 10 — приоритет выполнения (чем меньше число, тем раньше выполнится функция).
- 2 — количество аргументов, которые функция может принять.
4. Создание собственных хуков
Вы можете создавать свои хуки, чтобы другие разработчики могли расширять ваш код.
Создание Action:
function my_custom_action() {
// Выполняем код
do_action('my_custom_action'); // Создаем хук
}
Теперь другие разработчики могут «цепляться» к вашему хуку:
add_action('my_custom_action', 'some_function');
Создание Filter:
function my_custom_filter($content) {
$content = apply_filters('my_custom_filter', $content); // Создаем хук
return $content;
}
Теперь другие разработчики могут изменять данные:
add_filter('my_custom_filter', 'modify_content');
5. Примеры популярных хуков
Actions:
- init: Срабатывает после загрузки WordPress, но до вывода контента. Используется для инициализации.
- wp_enqueue_scripts: Для подключения скриптов и стилей.
- admin_menu: Для добавления пунктов меню в админку.
- save_post: Срабатывает при сохранении поста.
Пример:
function my_custom_init() {
// Код, который выполнится при инициализации
}
add_action('init', 'my_custom_init');
Filters:
- the_content: Фильтрует содержимое поста.
- the_title: Фильтрует заголовок поста.
- excerpt_length: Изменяет длину цитаты (excerpt).
- wp_mail: Фильтрует параметры отправки email.
Пример:
function custom_excerpt_length($length) {
return 20; // Устанавливаем длину цитаты в 20 слов
}
add_filter('excerpt_length', 'custom_excerpt_length');
6. Удаление хуков
Иногда нужно удалить хук, добавленный темой или плагином. Для этого используются функции:
- remove_action(): Удаляет Action.
- remove_filter(): Удаляет Filter.
Пример:
remove_action('wp_footer', 'my_custom_footer_text');
7. Приоритет хуков
Хуки могут иметь приоритет выполнения. По умолчанию приоритет равен 10. Чем меньше число, тем раньше выполнится хук.
Пример:
add_action('wp_footer', 'function_one', 5); // Выполнится первой
add_action('wp_footer', 'function_two', 15); // Выполнится позже
8. Практический пример: Добавление кнопки «Наверх»
function add_scroll_to_top_button() {
echo '<button id="scroll-to-top" style="display:none;">Наверх</button>';
echo '<script>
jQuery(document).ready(function($) {
$(window).scroll(function() {
if ($(this).scrollTop() > 100) {
$("#scroll-to-top").fadeIn();
} else {
$("#scroll-to-top").fadeOut();
}
});
$("#scroll-to-top").click(function() {
$("html, body").animate({ scrollTop: 0 }, 600);
return false;
});
});
</script>';
}
add_action('wp_footer', 'add_scroll_to_top_button');
Заключение
Хуки — это основа расширяемости WordPress. Они позволяют изменять поведение системы без изменения ядра. Используя Actions и Filters, вы можете создавать мощные плагины, темы и кастомизировать сайты под любые задачи. Понимание хуков — ключевой навык для разработчика WordPress.