Пишем Вордпрес плагин. часть 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 для события