WordPress: собственные хуки

· WordPress, Разработка плагинов и Хуки · 2 мин чтения

Вы можете не только использовать существующие хуки, но и создавать собственные, расширять функционал существующих хуков. Собственные хуки вызываться так же как и любые другие хуки в WordPress.

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

Используйте функцию do_action() для создания хука действий или apply_filters() для создания фильтров.

Я рекомендую использовать apply_filters(), если вы хотите изменить выводимый текст.

Конфликт имен

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

Например, вы можете назвать фильтр email_body, но вероятнее всего оно уже будет используется другим разработчиком, тем самым возникнет конфликт.

Примером нового название может стать — bologer_email_body, где bologer_ — это уникальный префикс, который поможет избежать проблемы.

Примеры

Расширяем действие: Форма настроек

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

<?php
functionbologer_settings_page_html()
{
    ?>
    Настройка 1: <input id="foo" name="foo" type="text">
    Настройка 2: <input id="bar" name="bar" type="text">
    <?php
    do_action('bologer_after_settings_page_html');
}

Теперь другой разработчик может зарегистрировать callback функцию для bologer_after_settings_page_html хука, чтобы добавить туда свои настройки:

<?php
function myprefix_add_settings()
{
    ?>
    Новая настройка: <input id="new_setting" name="new_settings" type="text">
    <?php
}
add_action('bologer_after_settings_page_html', 'myprefix_add_settings');

Расширяем фильтр: собственный тип поста

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

<?php
function wporg_create_post_type()
{
    $post_type_params = [/* ... */];
 
    register_post_type(
        'post_type_slug',
        apply_filters('bologer_post_type_params', $post_type_params)
    );
}

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

<?php
function myprefix_change_post_type_params($post_type_params)
{
    $post_type_params['hierarchical'] = true;
    return $post_type_params;
}
add_filter('bologer_post_type_params', 'myprefix_change_post_type_params');