Если вы хотите вставить какой-либо контент в произвольное место вашего проекта без ручного редактирования файлов шаблона, можно воспользоваться хуками (перехватчиками событий).
В современное время разработке хуков уделяется повышенный интерес, сравнимый разве что с проектировкой новых тем. Прежде чем перейти к их функциональности, разберемся, что вообще из себя представляет хук.
Хуки (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'); ?>
Естественно, теперь придется подцепить к этой функции какое-либо действие. Пусть она выводит какой-либо текст приветствия. Для того чтобы менять этот текст, было бы удобно вывести его в панель администратора. В таком случае пользователям не пришлось бы углубляться в дебри кода.
Связанные материалы:



Здравствуйте. У меня такая проблема. Я хочу, чтобы при публикации записи В ПЕРВЫЙ РАЗ отправлялось сообщение на почту. Вроде всё хорошо. Только отправляется сообщение не только после перехода из статуса «Черновик» в статус «Опубликовано», а ещё и при каждом редактировании/сохранении записи. Может вы подскажете, как справиться с этою бедой. Спасибо.
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 \r\n»;
@mail($to, $subject, $message, $headers);
}
add_action (‘publish_post’, ‘sendmessage’ );
Хм, честно говоря, не знаю, я даже не представляю, зачем нужна отправка сообщений о публикациях, если есть, к примеру, Feedburner.