Use these hooks to extend the Notifal admin experience: menus, list tables, reusable form fields, notification/campaign editor tabs, settings screens, and the WordPress dashboard widget.
Index: Hook Reference Hub. Architecture: shared FieldRenderer and BaseListView in Architecture Overview.
| Hook | Parameters | Description |
|---|
notifal/admin_menu/register/before | none | Before Notifal admin menu registration |
notifal/admin_main_menu/register/after | none | After main Notifal menu registered |
Admin page content (actions)
| Hook | Parameters | Description |
|---|
notifal/admin_page/content/before | none | Before any Notifal admin page main content |
notifal/admin_page/onpage_notifications/before | none | Before On-Page Notifications list/editor shell |
notifal/admin_page/onpage_notifications/after | none | After On-Page Notifications page |
notifal/settings/page/before | none | Before settings page render |
notifal/settings/page/after | none | After settings page render |
OnPage notification editor tabs (actions)
Dynamic patterns use sprintf() with tab and optional section identifiers.
| Pattern | Parameters | Description |
|---|
notifal/admin/onpage/{tab}/before | none | Before tab content |
notifal/admin/onpage/{tab}/after | none | After tab content |
notifal/admin/onpage/{tab}/{section}/before | none | Before section within tab |
notifal/admin/onpage/{tab}/{section}/after | none | After section within tab |
Example tab slugs: general, appearance, products, timing, behavior, display_rules, content_source.
Constants: ActionHooks::ADMIN_ONPAGE_TAB_BEFORE, ADMIN_ONPAGE_TAB_SECTION_BEFORE.
Inline placement (Appearance tab, Pro):
| Hook | Description |
|---|
notifal/admin/onpage/appearance/inline_placement/before | Before inline "Where" settings |
notifal/admin/onpage/appearance/inline_placement/after | After inline "Where" settings |
Campaign editor tabs (actions)
| Pattern | Parameters | Description |
|---|
notifal/admin/campaign/tab/{tab}/before | none | Before campaign tab |
notifal/admin/campaign/tab/{tab}/after | none | After campaign tab |
notifal/admin/campaign/tab/{tab}/section/{section}/before | none | Before campaign tab section |
notifal/admin/campaign/tab/{tab}/section/{section}/after | none | After campaign tab section |
List tables (actions and filters)
Used by BaseListView for notifications, templates, and campaigns.
Actions
| Hook | Parameters | Description |
|---|
notifal/admin/list/before_render | none | Before entire list UI |
notifal/admin/list/after_header | none | After list header (used for the Noti invite strip on OnPage) |
notifal/admin/list/after_render | none | After entire list UI |
notifal/admin/list/actions_before | WP_Post $post | Before row action buttons |
notifal/admin/list/actions_after | WP_Post $post | After row action buttons |
notifal/admin/list/handle_bulk_action | string $action, int[] $ids, string $postType | Custom bulk action handler |
Filters
| Hook | Parameters | Description |
|---|
notifal/admin/list/bulk_actions | array $actions | Available bulk actions |
notifal/admin/list/query_args | array $args | Main list query arguments |
notifal/admin/list/count_query_args | array $args | Count query arguments |
notifal/admin/list/row_actions | array $actions, WP_Post $post | Row action link definitions |
notifal/admin/list/custom_column | string $output, string $column_key, WP_Post $post | Custom column cell content |
notifal/admin/{post_type}/status_tabs | array $tabs, string $postType | Status filter tabs per post type |
Addons catalog (filters)
| Hook | Parameters | Description |
|---|
notifal/modules/registry | array $modules | Addon cards on Notifal → Addons (@since 3.0.0) |
Field hooks append the field ID as the final path segment.
Actions (before/after render)
| Base pattern | Description |
|---|
notifal/field/select/before/{id} | Before select field |
notifal/field/select/after/{id} | After select field |
notifal/field/text/before/{id} | Before text field |
notifal/field/text/after/{id} | After text field |
notifal/field/textarea/before/{id} | Before textarea |
notifal/field/textarea/after/{id} | After textarea |
notifal/field/date/before/{id} | Before date field |
notifal/field/date/after/{id} | After date field |
notifal/field/datetime/before/{id} | Before datetime field |
notifal/field/datetime/after/{id} | After datetime field |
notifal/field/toggle/before/{id} | Before toggle |
notifal/field/toggle/after/{id} | After toggle |
notifal/field/number/before/{id} | Before number input |
notifal/field/number/after/{id} | After number input |
notifal/field/color/before/{id} | Before color picker |
notifal/field/color/after/{id} | After color picker |
notifal/field/range/before/{id} | Before range slider |
notifal/field/range/after/{id} | After range slider |
notifal/field/media/before/{id} | Before media upload |
notifal/field/media/after/{id} | After media upload |
notifal/field/multi_checkbox/before/{id} | Before multi-checkbox |
notifal/field/multi_checkbox/after/{id} | After multi-checkbox |
Shared field actions (no dynamic ID)
| Hook | Parameters | Description |
|---|
notifal/field/ajax_search/before | none | Before AJAX post selector field |
notifal/field/ajax_search/after | none | After AJAX post selector field |
notifal/field/multi_select/before | none | Before multi-select field |
notifal/field/multi_select/after | none | After multi-select field |
Field filters
| Hook | Parameters | Description |
|---|
notifal/field/select/options/{id} | array $options | Options for a select field |
JavaScript translations (filters)
| Hook | Parameters | Description |
|---|
notifal/{Module}/js_translations | array $translations | Module-specific JS strings (dynamic module name) |
notifal/onpage/translations | array $translations | OnPage notification JS translations |
Toast messages (action and filters)
| Hook | Type | Parameters | Description |
|---|
notifal/toast/dispatched | action | message, type, redirect | Toast dispatched to admin |
notifal/toast/type | filter | string $type | Toast type before redirect |
notifal/toast/message | filter | string $message | Toast message before redirect |
| Hook | Parameters | Description |
|---|
notifal/dashboard_widget/before_render | none | Before Notifal dashboard widget content |
notifal/dashboard_widget/after_render | none | After widget content |
Filter: notifal/dashboard_widget/active_notifications in Analytics and Tracking.
Pre-created notifications archive (actions and filters)
Marketplace templates browsed inside wp-admin.
Actions
| Hook | Parameters | Description |
|---|
notifal/pre_created_notifications/archive/before | array $currentFilters, array $apiResponse | Before archive render |
notifal/pre_created_notifications/archive/after | array $currentFilters, array $apiResponse | After archive render |
notifal/pre_created_notifications/api/fetched | array $data, array $args | After list API fetch |
notifal/pre_created_notifications/api/single_fetched | array $data, int $notificationId | After single item API fetch |
notifal/pre_created_notifications/api/cache_cleared | none | After API cache cleared |
Filters
| Hook | Parameters | Description |
|---|
notifal/pre_created_notifications/api/params | array $params, array $args | Query params before API request |
notifal/pre_created_notifications/api/request_args | array $args, string $url, array $params | HTTP request args for API call |
WordPress core filters (reference)
Notifal registers blocks using these WordPress core filters (constants in base FilterHooks.php):
| Constant | Hook name | Description |
|---|
FilterHooks::WP_BLOCK_CATEGORIES_ALL | block_categories_all | Gutenberg block categories |
FilterHooks::WP_ALLOWED_BLOCK_TYPES_ALL | allowed_block_types_all | Allowed block types in editor |
What to read next
Hooks series
- Hook Reference Hub
- Hooks: Lifecycle and Bootstrap
- Hooks: Notifications and Eligibility
- Hooks: Templates and Rendering
- Hooks: Tags and Dynamic Data
- Hooks: Display Rules and Content Source
- Hooks: Analytics and Tracking
- Hooks: Admin UI Extension (you are here)
- Hooks: Pro Integration Bridge