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

Дата публикации:Август 28, 2010

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

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

Хуки (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'); ?>   

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

Поделиться

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. Architect Of Ruin says:

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

  3. Юрий says:

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

    • Дмитрий says:

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

  4. Юрий says:

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

    • Дмитрий says:

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

  5. Юрий says:

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

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.