Вы можете не только использовать существующие хуки, но и создавать собственные, расширять функционал существующих хуков. Собственные хуки вызываться так же как и любые другие хуки в 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');