Важной, но часто игнорируемой практикой является использование пользовательских хуков в вашем плагине, чтобы другие разработчики могли расширять и изменять его.
Пользовательские хуки создаются и вызываются так же, как и хуки ядра WordPress.
Содержание
Создание хука
Для создания пользовательского хука используйте do_action() для экшенов и apply_filters() для фильтров.
Добавление Callback на Хук
Чтобы добавить функцию обратного вызова (callback-функцию) на пользовательский хук, используйте add_action() для действий и add_filter() для фильтров.
Конфликты с названиями
Так как любой плагин может создать пользовательский хук, важно, установить префикс в имени хука, чтобы избежать конфликтов с другими плагинами.
Например, фильтр с именем email_body
будет менее целесообразен, потому что, скорее всего, другой разработчик выберет то же самое имя. Если пользователь установит оба плагина, это может привести к ошибкам, которые трудно отследить.
Название функции wporg_email_body
(где wporg_
является уникальным префиксом для вашего плагина) позволит избежать любых конфликтов.
Примеры
Расширяемый экшен: Форма настроек
Если ваш плагин добавляет форму настроек в Административные панели, вы можете использовать экшен, чтобы позволить другим плагинам добавлять свои собственные настройки к нему.
Foo:
Bar:
<?php
do_action( 'wporg_after_settings_page_html' );
}
Теперь другой плагин может зарегистрировать функцию обратного вызова (callback) для хука wporg_after_settings_page_html
и вставить новые настройки:
New 1:
<?php
}
add_action( 'wporg_after_settings_page_html', 'myprefix_add_settings' );
Расширяемый фильтр: Пользовательский тип записи
В данном примере, при регистрации нового типа записи, параметры, определяющие ее, передаются через фильтр, поэтому другой плагин может изменить их до того, как будет создан тип записи.
<?php
function wporg_create_post_type()
{
$post_type_params = [/* ... */];
register_post_type(
'post_type_slug',
apply_filters( 'wporg_post_type_params', $post_type_params )
);
}
Теперь другой плагин может зарегистрировать функцию обратного вызова для хука wporg_post_type_params и изменить параметры типа записи:
<?php
function myprefix_change_post_type_params( $post_type_params ) {
$post_type_params['hierarchical'] = true;
return $post_type_params;
}
add_filter( 'wporg_post_type_params', 'myprefix_change_post_type_params' );
Дополнительные ресурсы
- Extendable Extensions Майкла Филдса
- The Pluggable Plugin Брендана Дова
- WordPress Plugin Pet Peeves #3: Not Being Extensible Уилла Норриса (см. сайт willnorris.com)