Существуют два типа хуков — события и фильтры.
Если хук событий (функция do_action()) существует в коде, работающем на WordPress, то вы можете вставить свой код, вызвав функцию add_action() и передав имя хука события и пользовательскую функцию вместе с кодом, который вы хотите выполнить:
Аргументы функции do_action($tag, $arg)
Вы можете создать свой собственный хук в теме или плагине, добавив свои собственные функции doaction(). Однако проще использовать готовые хуки, уже установленные в WordPress или других плагинах. Например, предположим, что мы хотим проверить, вошёл ли пользователь в систему при первой загрузке WordPress, но перед отображением какого-либо вывода в браузере. Вы можете использовать хук init:
<?php
add_action('init', 'my_user_check');
function my_user_check(){
if(is_user_logged_in()){
// что-то сделать
}
}
?>
В ядре WordPress есть хук событий do_action(init), и мы вызываем функцию my_user_check() из функции add action(). В любой момент времени, когда код выполняется, если он попадает в хук события init, тот запускает нашу собственную функцию my_user_check(), чтобы выполнить наш код, прежде чем дальше продолжить.
Фильтры являются своего рода хуками событий в том смысле, что вы можете использовать их везде, где они есть в WordPress. Вместо того, чтобы вставлять свой собственный код, где есть хук или функция do_action(), вы фильтруете возвращаемое значение существующих функций, которые вызывают функцию apply_filters в ядре WordPress, плагинах и/или темах. Другими словами, с помощью фильтров вы можете захватить контент до того, как он будет вставлен в базу данных или до того, как он будет отображён в браузере в виде HTML.
В любом месте кода WordPress, где вы видите функцию apply_filters, вы можете фильтровать значение, возвращаемое этой функцией.
Для примера мы собираемся отфильтровать заголовки всех сообщений, прежде чем они будут отображены в браузере. Мы можем подключиться к любым существующим фильтрам через функцию add_filter().
Начнём с добавления фильтра для изменения заголовка любого сообщения, возвращаемого в браузер. Мы знаем о хуке фильтра для the_title, который выглядит так:
// $title — заголовок поста, $id — идентификатор поста
apply_filters('the_title’, $title, $id);
<?php
add_filter(’the_titie’, ’my_filtered_title’, 10, 2);
function my_filtered_title($value, $id) {
$value = ’[’ . $value . ’]’ ;
return $value;
}
?>
Представленный код программы заключает любые заголовки сообщений в квадратные скобки. Обратите внимание, что мы не использовали аргумент $id в нашей пользовательской функции. Если бы мы хотели, то могли бы добавить скобки только для конкретных определённых идентификаторов постов.