WordPress: Хуки

Существуют два типа хуков — события и фильтры.

Если хук событий (функция do_action()) существует в коде, работающем на WordPress, то вы можете вставить свой код, вызвав функцию add_action() и передав имя хука события и пользовательскую функцию вместе с кодом, который вы хотите выполнить:

Аргументы функции do_action($tag, $arg)

  • $stag — имя выполняемого хука события
  • $arg — один или несколько дополнительных аргументов, которые передаются в функцию, вызываемую из функции add_action(), ссылающейся на эту функцию do action()

Вы можете создать свой собственный хук в теме или плагине, добавив свои собственные функции 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 в нашей пользовательской функции. Если бы мы хотели, то могли бы добавить скобки только для конкретных определённых идентификаторов постов.

Реклама