В наших шаблонах и плагинах есть хуки, специальные метки, с помощью которых вы можете изменять какие-то значения или добавлять вывод своих блоков. Эти хуки есть и в самом WordPress в больших количествах.
Хуки делятся на 2 типа: события (action) и фильтры (filter).
Фильтры — всегда принимают какое-то значение, могут с ним произвести какие-то манипуляции и должны обязательно его вернуть.
События — просто срабатывают в определенном месте и ничего не должны возвращать, в них обычно выводят какой-то код.
Лучше всего для работы с хуками использовать пустой плагин ProFunctions, либо дочернюю тему.
Пример хука-действия wp_head
В WordPress есть встроенный хук-действие wp_head
. Он срабатывает в секции <head>
вашего сайта. В него можно вывести любой код, например, код подтверждения Яндекс или фавикон. Вот как это выглядит:
add_action( 'wp_head', function() {
echo '<meta name="yandex-verification" content="XXX" />';
echo '<link rel="icon" type="image/png" href="/favicon.png">';
} );
В первой строчке мы используем функцию add_action
, которая прикрепляет PHP функцию к хуку wp_head
. Внутри функции происходит вывод с помощью PHP-функции echo
. Функция только выводит контент и ничего не возвращает. При этом может встречаться и использоваться альтернативный синтаксис:
add_action( 'wp_head', 'add_yandex_and_favicon' );
function add_yandex_and_favicon() {
?>
<meta name="yandex-verification" content="XXX" />
<link rel="icon" type="image/png" href="/favicon.png">
<?php
};
Здесь отличие в том, что мы создаем отдельную функцию add_yandex_and_favicon
, внутри которой мы закрывает PHP-тег ?>
, дальше идет любой HTML-код и в конце PHP-тег снова открывается <?php
. Более предпочтительный первый вариант, т.к. он проще на восприятие, не нужно переживать, что функция add_yandex_and_favicon
уже где-то существует и будет ошибка, да и закрывать PHP-теги в функциях не лучшее решение.
Пример хука-фильтра the_content
Другой пример касается фильтров, они получают какое-то значение, могут с ним что-то сделать и обязательно должны что-то вернуть. Рассмотрим пример хука the_content
, который срабатывает перед выводом контента страницы.
add_filter( 'the_content', function( $content ) {
// здесь мы можем модифицировать контент
// например, мы добавим в конец текста название нашего сайта
return $content . '<p>Рекомендуем WPShop.ru</p>';
} );
В первой строчке мы используем функцию add_filter
, которая прикрепляет PHP функцию к хуку the_content
. Эта функция принимает 1 аргумент $content
, в котором будет контент записи. Внутри функции мы возвращаем с помощью конструкции return
новое значение. Мы можем изменить старое, либо что-то к нему добавить.
В фильтрах не должно быть echo
и другого вывода, только return
.