Что такое хуки и как их использовать?

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