Справочник: события и фильтры

Как пользоваться хуками — в «Как устроена CMS». Событие: add_action('имя', fn (...$аргументы) => …). Фильтр: add_filter('имя', fn ($значение, ...$аргументы) => $новоеЗначение). {папка}, {тип}, {имя} в названии — подставляется папка плагина, тип записей, имя настройки.

События (actions)

Загрузка

Событие Аргументы Когда
plugins_loaded — подключены все включённые плагины
after_setup_theme — подключены шаблоны и functions.php активной темы
init — всё загружено: регистрируйте типы записей, таксономии, блоки, роли

Админка

Событие Аргументы Когда
admin_init $request в начале каждой страницы админки
admin_menu $menu (Cms\Admin\AdminMenu) строится левое меню: $menu->add(…), $menu->addSubmenu(…)
dashboard_setup $widgets (Cms\Admin\DashboardWidgets) собираются виджеты консоли: $widgets->add('id', 'Заголовок', fn () => view(…))
admin_head — в <head> страниц админки
admin_notices — вверху каждой страницы админки, над её содержимым: здесь выводят свои предупреждения и подсказки
admin_footer — в конце страниц админки
login_form — внутри формы входа
settings_general_form — в конце формы «Настройки → Общие»
show_user_profile $user в форме своего профиля
edit_user_profile $user в форме чужого профиля
add_meta_boxes $postType, $post, $boxes открыт редактор записи: добавьте свои блоки полей
edit_form_after_editor $post в редакторе после поля текста

Записи

Событие Аргументы Когда
save_post $post, $request, $update запись сохранена в редакторе ($update — false для новой; если её уже создало автосохранение — true); автосохранение его не вызывает
save_post_{тип} $post, $request, $update то же для записей одного типа: save_post_page, save_post_review
trash_post $post запись перенесена в корзину
untrash_post $post запись восстановлена из корзины
before_delete_post $post перед удалением записи насовсем
restore_revision $post, $revision запись восстановлена из ревизии

Рубрики, метки, медиатека

Событие Аргументы Когда
created_term $term создан термин (рубрика, метка…)
edited_term $term термин изменён
delete_term $term термин удаляется
add_attachment $media файл загружен в медиатеку
edit_attachment $media изменены данные файла
delete_attachment $media файл удаляется

Пользователи и настройки

Событие Аргументы Когда
user_register $user создан пользователь
profile_update $user изменены данные пользователя
set_user_role $user, $role, $oldRole сменилась роль
delete_user $user пользователь удаляется
updated_option $name, $old, $new изменена настройка
deleted_option $name удалена настройка

Сайт и темы

Событие Аргументы Когда
template_redirect $context понятно, что открыто, шаблон ещё не выбран — можно перенаправить или отдать свой ответ
site_head $context в <head> страниц сайта (из cms_head())
site_body_open $context сразу после <body> (из cms_body_open())
site_footer $context перед </body> (из cms_footer())
switch_theme $theme, $oldSlug активирована другая тема
starter_sidebar $context событие темы «Старт»: внизу боковой колонки

Плагины и темы

Событие Аргументы Когда
activate_{папка} $plugin включается этот плагин (лучше — register_activation_hook())
deactivate_{папка} $plugin отключается этот плагин (register_deactivation_hook())
activated_plugin $plugin включён любой плагин
deactivated_plugin $plugin отключён любой плагин
installed_plugin $plugin, $replaced плагин установлен (или обновлён) из архива
deleted_plugin $slug плагин удалён
installed_theme $theme, $replaced тема установлена (или обновлена) из архива
deleted_theme $slug тема удалена

Формы, установка, обновления, резервные копии

Событие Аргументы Когда
form_submitted $form, $entry пришла заявка с формы (уже сохранена)
cms_installed $user мастер установки закончил работу ($user — администратор)
core_updated $from, $to CMS обновлена (база тоже)
backup_created $file сделана резервная копия (путь к zip)
backup_restored $file сайт восстановлен из копии

Фильтры

Содержимое

Фильтр Значение и аргументы Что меняет
the_title $title, $post заголовок записи при выводе (displayTitle())
the_content $html, $post текст записи при выводе (contentHtml())
excerpt_length $words (40) длина отрывка в словах
render_block $html, $block, $post HTML одного блока
load_block_styles $load (true) подключать ли стили блоков на сайте
embed_resolve $embed, $url видео по ссылке для блока «Видео»
upload_types $types какие файлы можно загружать (группа → расширения)
image_sizes $sizes размеры уменьшенных копий картинок

Сайт и темы

Фильтр Значение и аргументы Что меняет
template_hierarchy $candidates, $context список шаблонов, из которых выбирается первый найденный
{тип}_template_hierarchy $candidates, $context то же для одного вида страниц: single_…, page_…, category_…, search_…, front_page_…
template_include $view, $context итоговый шаблон
document_title $title, $context заголовок вкладки браузера
meta_description $description, $context описание страницы для поисковиков
archive_title $title, $context заголовок архива (рубрики, метки, поиска)
body_class $classes классы <body>
nav_menu_items $tree, $menu пункты меню перед выводом
nav_menu_html $html, $location, $args готовый HTML меню

SEO

Фильтр Значение и аргументы Что меняет
robots_noindex $noindex, $context скрыть страницу от поисковиков
og_tags $tags, $context метки Open Graph (og:title, og:image…)
sitemap_entries $entries адреса в sitemap.xml (['loc' => …, 'lastmod' => …])
robots_txt $text текст robots.txt

Админка, настройки, плагины

Фильтр Значение и аргументы Что меняет
admin_title $title, $pageTitle заголовок вкладки браузера в админке
admin_footer_text $html текст внизу страниц админки
option_{имя} $value значение настройки при чтении (get_option)
pre_update_option_{имя} $value, $old значение настройки перед сохранением
plugin_action_links_{папка} $links, $plugin ссылки под названием этого плагина ('Текст' => 'адрес')
plugin_action_links $links, $plugin то же для всех плагинов

Формы, здоровье сайта, резервные копии

Фильтр Значение и аргументы Что меняет
form_fields $fields, $form поля формы при выводе
form_recipients $emails, $form кому отправлять письма о заявках
site_health_checks $checks, $quick проверки «Здоровья сайта»: добавьте свою ['id', 'status' => good/recommended/critical, 'label', 'description', 'action']
backup_paths $paths папки сайта в резервной копии