elementor-hooks

SKILL.md

Elementor Hooks Reference

1. PHP Action Hooks

Lifecycle

Hook Name Parameters Description
elementor/loaded none Fires when Elementor plugin is loaded, before components initialize. Use for checking Elementor availability.
elementor/init none Fires when Elementor is fully loaded. Use for registering custom functionality.

Registration

Hook Name Parameters Description
elementor/widgets/register Widgets_Manager $widgets_manager Register custom widgets
elementor/controls/register Controls_Manager $controls_manager Register custom controls
elementor/dynamic_tags/register Dynamic_Tags_Manager $dynamic_tags_manager Register dynamic tags
elementor/finder/register Categories_Manager $categories_manager Register Finder categories
elementor/elements/categories_registered Elements_Manager $elements_manager Register widget categories
elementor/documents/register Documents_Manager $documents_manager Register document types

Frontend Scripts and Styles

Hook Name Parameters Description
elementor/frontend/after_register_scripts none After frontend scripts registered
elementor/frontend/before_register_scripts none Before frontend scripts registered
elementor/frontend/after_register_styles none After frontend styles registered
elementor/frontend/before_register_styles none Before frontend styles registered
elementor/frontend/after_enqueue_scripts none After frontend scripts enqueued
elementor/frontend/before_enqueue_scripts none Before frontend scripts enqueued
elementor/frontend/after_enqueue_styles none After frontend styles enqueued
elementor/frontend/before_enqueue_styles none Before frontend styles enqueued

Editor Scripts and Styles

Hook Name Parameters Description
elementor/editor/before_enqueue_scripts none Before editor scripts enqueued
elementor/editor/after_enqueue_scripts none After editor scripts enqueued
elementor/editor/after_enqueue_styles none After editor styles enqueued
elementor/editor/before_enqueue_styles none Before editor styles enqueued

Preview Scripts and Styles

Hook Name Parameters Description
elementor/preview/enqueue_scripts none Enqueue scripts in the preview iframe
elementor/preview/enqueue_styles none Enqueue styles in the preview iframe

Widget Rendering

Hook Name Parameters Description
elementor/widget/{$widget_name}/skins_init Widget_Base $widget Register custom skins for a widget
elementor/widget/before_render_content Widget_Base $widget Before widget content renders
elementor/frontend/before_render Element_Base $element Before any element renders (all types)
elementor/frontend/after_render Element_Base $element After any element renders (all types)
elementor/frontend/{$element_type}/before_render Element_Base $element Before specific element type renders
elementor/frontend/{$element_type}/after_render Element_Base $element After specific element type renders

Element types for {$element_type}: section, column, container, widget

Document and Editor Save

Hook Name Parameters Description
elementor/documents/register_controls Document $document Register controls for documents/page settings
elementor/editor/after_save int $post_id, array $editor_data After user saves editor data
elementor/document/before_save Document $document, array $data Before document saves
elementor/document/after_save Document $document, array $data After document saves

CSS File Hooks

Hook Name Parameters Description
elementor/element/parse_css Post $post_css, Element_Base $element Add custom CSS rules to element CSS
elementor/element/before_parse_css Post $post_css, Element_Base $element Before CSS is parsed
elementor/css-file/{$name}/enqueue CSS_File $css_file When a CSS file is enqueued
elementor/core/files/clear_cache none When CSS cache is cleared

Forms (Pro)

Hook Name Parameters Description
elementor_pro/forms/validation Form_Record $record, Ajax_Handler $ajax_handler Validate all form fields
elementor_pro/forms/validation/{$field_type} array $field, Form_Record $record, Ajax_Handler $ajax_handler Validate specific field type
elementor_pro/forms/process Form_Record $record, Ajax_Handler $ajax_handler After fields validated, process form
elementor_pro/forms/process/{$field_type} array $field, Form_Record $record, Ajax_Handler $ajax_handler Process specific field type
elementor_pro/forms/new_record Form_Record $record, Ajax_Handler $ajax_handler After form actions run
elementor_pro/forms/form_submitted Forms\Module $module When form POST received
elementor_pro/forms/mail_sent array $settings, Form_Record $record After form email sent
elementor_pro/forms/webhooks/response array|WP_Error $response, Form_Record $record Handle webhook response

Query (Pro)

Hook Name Parameters Description
elementor/query/{$query_id} WP_Query $query, Widget_Base $widget Filter Posts/Portfolio widget query. Set Query ID in widget settings.

Other Important Actions

Hook Name Parameters Description
elementor/ajax/register_actions Ajax_Manager $ajax_manager Register AJAX handlers
elementor/editor/init none Editor initialization
elementor/editor/footer none Editor footer output
elementor/preview/init none Preview initialization
elementor/kit/register_tabs Kit $kit Register kit (site settings) tabs
elementor/page_templates/canvas/before_content none Before canvas template content
elementor/page_templates/canvas/after_content none After canvas template content
elementor/template-library/after_save_template int $template_id, array $data After template saved
elementor/element/after_add_attributes Element_Base $element After render attributes added
elementor/experiments/default-features-registered Experiments_Manager $manager Register experiments

2. PHP Filter Hooks

Widget Output Filters

Filter Name Parameters Description
elementor/widget/render_content string $content, Widget_Base $widget Filter widget HTML on frontend
elementor/{$element_type}/print_template string $template, Widget_Base $widget Filter widget JS template in preview
elementor/frontend/the_content string $content Filter entire Elementor page output
elementor/frontend/{$element_type}/should_render bool $should_render, Element_Base $element Control whether element renders

Document and Config Filters

Filter Name Parameters Description
elementor/document/config array $config, Document $document Filter document config
elementor/document/save/data array $data, Document $document Filter data before save
elementor/document/urls/edit string $url, Document $document Filter edit URL
elementor/document/urls/preview string $url, Document $document Filter preview URL
elementor/editor/localize_settings array $settings Filter editor localized settings

Visual Element Filters

Filter Name Parameters Description
elementor/frontend/print_google_fonts bool $print Return false to disable Google Fonts loading
elementor/shapes/additional_shapes array $shapes Add custom shape dividers
elementor/mask_shapes/additional_shapes array $shapes Add custom mask shapes
elementor/utils/get_placeholder_image_src string $src Change default placeholder image
elementor/icons_manager/additional_tabs array $tabs Add custom icon libraries
elementor/fonts/additional_fonts array $fonts Add custom fonts
elementor/controls/animations/additional_animations array $animations Add custom animations
elementor/divider/styles/additional_styles array $styles Add custom divider styles

Finder and Template Filters

Filter Name Parameters Description
elementor/finder/categories array $categories Add/modify Finder categories
elementor/template-library/get_template array $template_data Filter template data
elementor/template_library/is_template_supports_export bool $supports, array $template Control template export
elementor/files/allow_unfiltered_upload bool $allow Allow unfiltered file uploads
elementor/files/svg/enabled bool $enabled Enable/disable SVG support

Forms Filters (Pro)

Filter Name Parameters Description
elementor_pro/forms/wp_mail_headers string $headers Filter form email headers
elementor_pro/forms/wp_mail_message string $message Filter form email body HTML
elementor_pro/custom_fonts/font_display string $display Override custom fonts font-display value

Other Important Filters

Filter Name Parameters Description
elementor/frontend/builder_content_data array $data, int $post_id Filter builder content data
elementor/frontend/assets_url string $url Filter frontend assets URL
elementor/widgets/black_list array $black_list Widget class blacklist
elementor/element/get_child_type string $child_type, array $data Filter allowed child types
elementor/utils/is_post_type_support bool $support, int $post_id, string $post_type Filter post type support

3. Injecting Controls

Targeting All Elements

Inject controls into every element using these hooks:

Hook Name Params Use
elementor/element/before_section_start $element, $section_id, $args Add new section before an existing section
elementor/element/after_section_start $element, $section_id, $args Add control inside start of existing section
elementor/element/before_section_end $element, $section_id, $args Add control inside end of existing section
elementor/element/after_section_end $element, $section_id, $args Add new section after an existing section

Targeting Specific Elements

Use {$stack_name} and {$section_id} to target a specific widget and section:

Hook Pattern Params Use
elementor/element/{$stack_name}/{$section_id}/before_section_start $element, $args Add section before
elementor/element/{$stack_name}/{$section_id}/after_section_start $element, $args Add control at section start
elementor/element/{$stack_name}/{$section_id}/before_section_end $element, $args Add control at section end
elementor/element/{$stack_name}/{$section_id}/after_section_end $element, $args Add section after

See resources/injecting-controls-examples.md for code examples.


4. JS Frontend Hooks

Frontend hooks use elementorFrontend.hooks (available on the frontend page).

Actions

Hook Name Parameters Description
elementor/frontend/init none Frontend initialized
frontend/element_ready/global $scope (jQuery), $ (jQuery) Any element is ready (sections, columns, widgets)
frontend/element_ready/widget $scope (jQuery), $ (jQuery) Any widget is ready
frontend/element_ready/{widgetType.skinName} $scope (jQuery), $ (jQuery) Specific widget+skin is ready (e.g. image.default)

Filters

Hook Name Parameters Description
frontend/handlers/menu_anchor/scroll_top_distance int scrollTop Adjust scroll distance for menu anchors

See resources/js-hooks-commands.md for code examples.


5. JS Editor Hooks

Editor hooks use elementor.hooks (available inside the Elementor editor).

Actions

Hook Name Parameters Description
panel/open_editor/{elementType} panel, model, view Settings panel opened for element type (widget, section, column)
panel/open_editor/{elementType}/{elementName} panel, model, view Settings panel opened for a specific widget name

Filters

Hook Name Parameters Description
elements/context-menu/groups array groups Modify right-click context menu groups

See resources/js-hooks-commands.md for code examples.


6. JS Commands API ($e.commands)

The Commands API (since 2.7.0) manages all editor commands. Run commands with $e.run().

Key Methods

Method Parameters Returns Description
$e.commands.register() component, command, callback Commands Register a new command
$e.run() string command, object args * Execute a command
$e.commands.getAll() none Object Get all registered commands
$e.commands.getCurrent() none Object Get currently running commands
$e.commands.is() string command Boolean Check if command is currently running
$e.commands.getCurrentArgs() none Object Get args of currently running command
$e.commands.getCurrentFirst() none String Get first currently running command

Command Types

Base Class Type Purpose
$e.modules.CommandBase User commands Represent user actions
$e.modules.CommandInternalBase Internal commands For internal editor use
$e.modules.CommandData Data commands Communicate with data/cache/backend

See resources/js-hooks-commands.md for full code examples.


7. JS Components API ($e.components)

Method Parameters Returns Description
$e.components.register() ComponentBase component ComponentBase Register a component
$e.components.get() string id ComponentBase Get component by namespace
$e.components.getAll() none array Get all components
$e.components.activate() string namespace Activate a component
$e.components.inactivate() string namespace Deactivate a component
$e.components.isActive() string namespace Boolean Check if component is active
$e.components.getActive() none Object Get all active components

A component serves as a namespace that holds commands, hooks, routes, tabs, shortcuts, and utils. Component class files should be named component.js.

See resources/js-hooks-commands.md for code examples.


8. JS Hooks API ($e.hooks)

The $e.hooks API manages hooks that fire before/after commands run via $e.run().

UI Hooks

Method Parameter Description
$e.hooks.registerUIBefore() HookBase instance Before command runs (UI)
$e.hooks.registerUIAfter() HookBase instance After command runs (UI)
$e.hooks.registerUICatch() HookBase instance When command fails (UI)

Data Hooks

Method Parameter Description
$e.hooks.registerDataDependency() HookBase instance Before command (dependency check)
$e.hooks.registerDataAfter() HookBase instance After command runs (data)
$e.hooks.registerDataCatch() HookBase instance When command fails (data)

See resources/js-hooks-commands.md for hook convention code examples and import patterns.


9. Common Patterns

I want to... Use this hook
Register a custom widget elementor/widgets/register (action)
Register a custom control elementor/controls/register (action)
Add a widget category elementor/elements/categories_registered (action)
Register a dynamic tag elementor/dynamic_tags/register (action)
Enqueue frontend script elementor/frontend/after_register_scripts (action)
Enqueue editor script elementor/editor/after_enqueue_scripts (action)
Enqueue preview script elementor/preview/enqueue_scripts (action)
Add control to existing widget elementor/element/{widget}/{section}/before_section_end (action)
Add control to page settings elementor/documents/register_controls (action)
Add control to user preferences elementor/element/editor-preferences/preferences/before_section_end (action)
Modify widget HTML output elementor/widget/render_content (filter)
Modify widget JS template elementor/widget/print_template (filter)
Filter entire page output elementor/frontend/the_content (filter)
Disable Google Fonts elementor/frontend/print_google_fonts return false (filter)
Change placeholder image elementor/utils/get_placeholder_image_src (filter)
Add custom shape dividers elementor/shapes/additional_shapes (filter)
Add custom mask shapes elementor/mask_shapes/additional_shapes (filter)
Validate form data (Pro) elementor_pro/forms/validation (action)
Process form after submit (Pro) elementor_pro/forms/new_record (action)
Filter posts widget query (Pro) elementor/query/{$query_id} (action)
Add CSS rules to elements elementor/element/parse_css (action)
Run code when widget ready (JS) frontend/element_ready/{widget.skin} via elementorFrontend.hooks
Hook into editor panel open (JS) panel/open_editor/{type}/{name} via elementor.hooks
Register editor command (JS) $e.commands.register() or component defaultCommands()
Hook before/after command (JS) $e.hooks.registerUIBefore() / $e.hooks.registerUIAfter()
Weekly Installs
26
GitHub Stars
3
First Seen
Feb 4, 2026
Installed on
opencode25
codex22
gemini-cli21
claude-code20
github-copilot17
cursor16