Пишем Вордпрес плагин. часть 2. Хуки

  • 21 Апр 2011
Ворпрес плагин. Хуки

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

События (хуки)

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

add_action( 'action_name', 'function_name', [priority], [accepted_args] );

action_name
имя события
function_name
имя нашей функции которая должна быть выполнена при событии ‘action_name’
priority
необязательний параметр, приоритет выполнения, по умолчанию 10, так как на одно событие может быть привязано несколько функций (например, в разных плагинах) то раньше выполнится тот в которого значения приоритет меньше, если значения одинаковы то тот кто раньше был привязан к событию (раньше выполнена функция add_action() )
accepted_args
необязательний параметр, количество принимаемых аргументов для вашей функции, по умолчанию 1, но некоторые события могут передавать больше аргументов

Список доступных событий (хуков, в статье ето параметр action_name) можна глянуть сдесь http://codex.wordpress.org/Plugin_API/Action_Reference

Пример

Создадим функцию которая сработает при выполнении события ‘publish_post’

<?php
/*
функция отправляет сообщение на почту друзьям
о публикации нового поста на вашем блоге
*/
function kori_email_friends( $post_ID ) {
  $friends = 'bob@example.org, susie@example.org';
  mail( $friends, 'Новая запись в блоге',
  'Посетите мой блог: http://blog.example.com/?p='.$post_ID );
  return $post_ID;
}
// задаем обработчик для события
add_action( 'publish_post', 'kori_email_friends' );
?>
Не забываем что имя нашей функции не должно совпасть с именами других функций используемых в Вордпресе и плагинах, поэтому я добавил к имени префикс

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

<?php
class emailer {
  function send ( $post_ID ) {
    $friends = 'bob@example.org, susie@example.org';
    mail($friends,'Новая запись в блоге',
    'Посетите мой блог: http://blog.example.com/?p='.$post_ID);
    return $post_ID;
  }
}
add_action( 'publish_post', array ( 'emailer', 'send' ) );
/*
array('emailer', 'send') - так мы указываем что нужно статически вызвать
метод 'send' класа 'emailer'
*/
?>

Дополнительные функции которые могут вам помочь:

has_action( 'action_name', 'function_name' );
- возвращает приоритет выполнения функции 'function_name' для события
'action_name', если такая функция не связана с этим событием то
возвращает false

has_action( 'action_name' );
- возвращает true если для событием 'action_name' назаначена функция
обработчик, в противном случае false

do_action( 'test_do_action' );
- выполнит функции назначеные собитию 'test_do_action', событие может быть
стандартное из Вордпрес, так и придуманное нами
do_action_ref_array();
did_action( 'action_name' );
- возвращает количество срабатываний события 'action_name';
remove_action( 'action_name', 'function_name' );
- удалить обработчик 'function_name' для события 'action_name'
remove_all_actions( 'action_name' );
- удалить все обработчики для события
remove_all_actions( 'action_name', 'priority' );
- удалить все обработчики с приоритетом $priority для события

Что вы думаете?

Имя обязательно

Сайт