Создание хуков в WordPress

Если вы хотите вставить какой-либо контент в произвольное место вашего проекта без ручного редактирования файлов шаблона, можно воспользоваться хуками (перехватчиками событий).

В современное время разработке хуков уделяется повышенный интерес, сравнимый разве что с проектировкой новых тем. Прежде чем перейти к их функциональности, разберемся, что вообще из себя представляет хук.

Хуки (hooks) можно отыскать в любой теме. Знакомые уже нам wp_head и wp_footer, находящиеся в файлах шаблона header.php и footer.php — не что иное как хуки. Они позволяют «подцеплять» произвольный материал к базовым функциям.

Разработка тем тесно связана с добавлением хуков. Проектировщики тем расставляют их в различных частях кода, позволяя разработчикам дочерних тем или простым пользователям изменять представление конкретной секции. С помощью хуков можно менять представление отдельных элементов, полностью удалять различные секции. Удобно создать для этого отдельную страницу в панели администратора, и предоставить пользователю полный контроль над всеми событиями.

Однако, не стоит создавать огромную кучу хуков и сбрасывать всю работу по их отключению или подключению на пользователя. Структура должны быть цельной, а не раздробленной на детали. Именно поэтому важно оставить только те хуки, которые действительно необходимы, а остальные пусть добавляет сам пользователь.

Описание всех хуков можно найти на страницах кодекса: codex.wordpress.org/Plugin_API/Action_Reference.

Подключение хуков

Допустим, вы хотите подцепить к wp_footer код, выводящий какую-либо статистику. Делается это при помощи создания функции в файле functions.php, выполняющей описанные действия:

<?php
function my_webstats()  
{ ?>  
    <script for your web statistics tracker />
<?php } ?>

Функция получила название my_webstats(). Сейчас в ней находится нерабочий скрипт, однако это не так важно, поскольку это всего лишь пример. Все, что нам потребуется далее — подцепить эту функцию к хуку wp_footer. Делается это при помощи функции add_action, которая должна находиться перед my_webstats():

<?php
    add_action('wp_footer', 'my_webstats');
    function my_webstats()  
{ ?>  
    <script code for your web statistics tracker />
<?php } ?>

Первый параметр add_action() — это название хука, к которому будет подцепляться заданная во втором параметре функция my_webstats.

Указанный участок кода должен быть размещен в файле functions.php.

Создание собственных хуков

Создание собственных хуков не составляет никакого труда. В самом начале пишется PHP-функция, подобная приведенной в примере выше, и затем ей присваивается какая-либо функциональность. Единственное различие между стандартными и созданными вами хуками заключается в том, что последние придется самому прописывать в коде файлов темы.

Следующий код позволяет добавить хук к теме:

<?php do_action('the-name-of-the-function'); ?>

В качестве параметра ‘the-name-of-function’ необходимо указать название созданной функции. Если ваша функция называется, к примеру, welcome_text, то код будет выглядеть следующим образом:

 <?php do_action('welcome_text'); ?>   

Естественно, теперь придется подцепить к этой функции какое-либо действие. Пусть она выводит какой-либо текст приветствия. Для того чтобы менять этот текст, было бы удобно вывести его в панель администратора. В таком случае пользователям не пришлось бы углубляться в дебри кода.

Блог про WordPress
Комментарии: 7
  1. Аноним

    Здравствуйте. У меня такая проблема. Я хочу, чтобы при публикации записи В ПЕРВЫЙ РАЗ отправлялось сообщение на почту. Вроде всё хорошо. Только отправляется сообщение не только после перехода из статуса "Черновик" в статус "Опубликовано", а ещё и при каждом редактировании/сохранении записи. Может вы подскажете, как справиться с этою бедой. Спасибо.

    function sendmessage()

    {

    global $post;

    $to .= 'ID, 'author_email', true) .'>';

    $subject = "Your company has published";

    $message .= "Congratulations! Your company has been added to the list";

    $headers .= "From: Hosting Review rn";

    @mail($to, $subject, $message, $headers);

    }

    add_action ('publish_post', 'sendmessage' );

  2. Дмитрий (автор)

    Хм, честно говоря, не знаю, я даже не представляю, зачем нужна отправка сообщений о публикациях, если есть, к примеру, Feedburner.

  3. Юрий

    Вечер добрый! Подскажите. Если создали собственно функцию и вставили в файл. Но при обновлении ведь улетит. Как быть . Как вставить свои функции.

    1. Дмитрий (автор)

      Писать функциональный плагин, если вы про functions.php. Отдельный плагин чисто под свою функцию.

  4. Юрий

    Спасибо за ответ.Т.е. хуки и функция зацеп вывода хука при обновлении исчезают. Вставив зацеп в определенное место headerсохранить при обновлении невозможно ?

    1. Дмитрий (автор)

      Если вы тему обновите, то да. Если сам WP обновите, то ничего не слетит.

  5. Юрий

    Спасибо Вам за письмо.

Добавить комментарий для Дмитрий Отменить ответ

Получать новые комментарии по электронной почте.