Если вы хотите вставить какой-либо контент в произвольное место вашего проекта без ручного редактирования файлов шаблона, можно воспользоваться хуками (перехватчиками событий).
В современное время разработке хуков уделяется повышенный интерес, сравнимый разве что с проектировкой новых тем. Прежде чем перейти к их функциональности, разберемся, что вообще из себя представляет хук.
Хуки (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 rn";
@mail($to, $subject, $message, $headers);
}
add_action ('publish_post', 'sendmessage' );
Хм, честно говоря, не знаю, я даже не представляю, зачем нужна отправка сообщений о публикациях, если есть, к примеру, Feedburner.
Вечер добрый! Подскажите. Если создали собственно функцию и вставили в файл. Но при обновлении ведь улетит. Как быть . Как вставить свои функции.
Писать функциональный плагин, если вы про functions.php. Отдельный плагин чисто под свою функцию.
Спасибо за ответ.Т.е. хуки и функция зацеп вывода хука при обновлении исчезают. Вставив зацеп в определенное место headerсохранить при обновлении невозможно ?
Если вы тему обновите, то да. Если сам WP обновите, то ничего не слетит.
Спасибо Вам за письмо.