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' ) // функция внутри пространства имён );
А если нужно вернуть простое значение?
__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