4.3 Пользовательские хуки

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

Пользовательские хуки создаются и вызываются так же, как и хуки ядра WordPress.

Создание хука

Для создания пользовательского хука используйте do_action() для экшенов и apply_filters() для фильтров.

Мы рекомендуем использовать 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' );

Дополнительные ресурсы

Наверх ↑