wordcamp russia 2015: Фильтры и события в wordpress

29
События и фильтры в WordPress WordCamp Russia 2015 15 августа

Upload: igor-zinovyev

Post on 16-Apr-2017

547 views

Category:

Internet


2 download

TRANSCRIPT

События и фильтры в WordPress

WordCamp Russia 201515 августа

Игорь Зиновьев

Automattic jetpack.me

@zinigor

WordPress – платформаЛегкость создания своего функционала.

За счет чего она достигается? Что такое «хуки»?

События и фильтрыЕсть ли отличия, и в чём они?

function add_action( . . . ) { return add_filter( . . . ); }

https://core.trac.wordpress.org/browser/tags/4.2.2/src/wp-includes/plugin.php#L429

События и фильтрыэто практически одно и то же

Почему именно события?Какие преимущества даёт использование обработчиков событий

при разработке программного обспечения?

Зачем так сложно?Если я скачал WordPress, я могу делать с ним что хочу, правда?

Почему бы не внести правки в чужой код напрямую?

Как использовать «хуки»?

add_action( 'init', 'lol_action_handler' );

function lol_action_handler() { wp_die( 'LOL' ); }

Как использовать «хуки»?

add_filter( 'the_title', 'lol_title_filter' );

function lol_title_filter( $title ) { return $title . ' LOL'; }

Как быть, если хук уже используется?

add_action( 'init', 'lol_action_handler', 10 // приоритет - чем меньше, тем раньше, // если одинаковый приоритет - FIFO );

Что если нужно принять параметры?add_filter( 'the_title', 'lol_title_filter', 10, 1 // количество параметров на входе // функции-обработчика );

Как быть, если я люблю ООП?

add_filter( 'the_title', array( $object, 'lol_filter_method' ) // метод объекта );

Как быть, если я люблю ООП?

add_filter( 'the_title', array( 'Lmao_Rofl', 'lol_filter_method' ) // статический метод класса );

Как быть, если я люблю PHP 5.3?

add_filter( 'the_title', array( 'LolSpace\\lol_filter_method' ) // функция внутри пространства имён );

Как быть, если я люблю PHP 5.3?add_filter( 'the_title', function() { // анонимная функция } );

А как отменить?

remove_action( 'init', 'lol_action_handler', 10 );

А если нужно вернуть простое значение?

__return_true() __return_false() __return_zero() __return_null() __return_empty_string() __return_empty_array()

Какие бывают события?

https://codex.wordpress.org/Plugin_API/Action_Reference

загрузились плагиныпользователь авторизовался

начало подключения JS

загрузился постзагрузилось меню администратора

новый медиафайл

новый комментарий

выбор шаблона активация плагина

сброс пароля

Какие бывают события?

https://codex.wordpress.org/Plugin_API/Action_Reference

загрузились плагиныпользователь авторизовался

начало подключения JS

загрузился постзагрузилось меню администратора

новый медиафайл

новый комментарий

выбор шаблона активация плагина

сброс пароля

template_redirect

Какие бывают события?

https://codex.wordpress.org/Plugin_API/Action_Reference

загрузились плагиныпользователь авторизовался

начало подключения JS

загрузился постзагрузилось меню администратора

новый медиафайл

новый комментарий

выбор шаблона активация плагина

сброс пароля

comment_post

Какие бывают события?

https://codex.wordpress.org/Plugin_API/Action_Reference

загрузились плагиныпользователь авторизовался

начало подключения JS

загрузился постзагрузилось меню администратора

новый медиафайл

новый комментарий

выбор шаблона активация плагина

сброс пароля all

Как дать возможность другим использовать «хуки»?

А также зачем это нужно?

Моя тема или плагин взаимодействуют с другими.

do_action( 'lmao_rofl_init', $data, … );

$new_data = apply_filter( 'lmao_rofl_data', $data, $argument, … );

Документируйте события и фильтры.

• Легкая настройка

• Взаимодействие

• Сотрудничество при разработке

Например, фильтры в Jetpack.

jetpack_photon_skip_image

https://github.com/Automattic/jetpack/blob/master/class.photon.php#L155

jetpack_widget_name

https://github.com/Automattic/jetpack/blob/master/class.jetpack-client.php#L261

jetpack_can_make_outbound_https

https://github.com/Automattic/jetpack/blob/master/modules/widgets/facebook-likebox.php#L33

Например, фильтры в Jetpack.

jetpack_photon_skip_image

https://github.com/Automattic/jetpack/blob/master/class.photon.php#L155

jetpack_widget_name

https://github.com/Automattic/jetpack/blob/master/class.jetpack-client.php#L261

jetpack_can_make_outbound_https

https://github.com/Automattic/jetpack/blob/master/modules/widgets/facebook-likebox.php#L33

Например, фильтры в Jetpack.

jetpack_photon_skip_image

https://github.com/Automattic/jetpack/blob/master/class.photon.php#L155

jetpack_widget_name

https://github.com/Automattic/jetpack/blob/master/class.jetpack-client.php#L261

jetpack_can_make_outbound_https

https://github.com/Automattic/jetpack/blob/master/modules/widgets/facebook-likebox.php#L33

Фильтр очень просто добавить.Участвуйте в разработке своих любимых тем и плагинов.

Спасибо за внимание!Буду рад ответить на ваши вопросы!