Elementor ability reference
Reference for the GoBuildWP Pro 1.12.4 source. Installed schemas and policy remain authoritative.
This Elementor ability reference lists every call GoBuildWP Pro registers for Elementor Pro classes, variables, interactions and dynamic tags, with the exact slug an agent sends and what the plugin's own contract says it does. Of the 52, 19 read, 21 write and 12 are marked destructive in the source.
Read-only, write and destructive groups describe the source annotations. They do not establish a minimum safety profile, human approval or undo support. Those controls are separate: check the installed ability, the connected user and the active site policy before calling it. A read can still return sensitive data. These pages are not evidence that every operation passed an end-to-end runtime test.
What Elementor needs before these load
These 52 abilities come with GoBuildWP Pro 1.12.4. Pro registration requires the Freemius SDK to permit premium code and any companion dependency the module checks to be available. The floors below apply to the named dependencies or features; an optional add-on or newer feature floor does not necessarily disable the base module. wppilot/integration-health and the module's setup call describe the installed availability.
- Minimum (base)
- 3.6.0
WPPILOT_PRO_ELEMENTOR_MIN_VERSION - Minimum (atomic)
- 4.0.0
- Elementor editions
- free, pro
- Agent skills shipped
elementor-build-page,elementor-convert-to-v4,content-model-schema,content-model-migration,dynamic-data-binding
Example Elementor input: wppilot/elementor-get-content
This one operation declares the 3 top-level input parameters below in wppilot/includes/elementor/wppilot-get-content.php; post_id is required. Other calls in this module take different arguments. Nested schemas and constraints are not expanded here; the complete live schema a connected client discovers is authoritative.
| Parameter | Type and meaning |
|---|---|
post_idrequired | integer. The WordPress post ID. |
element_id | string. Return only the subtree rooted at this element id, with full settings. This is the cheap, targeted way to zoom into one widget after reading the skeleton. Prefer this over full_dump. |
full_dump | boolean. HEAVY. When true, every element in the tree includes its full settings - expect thousands of tokens for a real page. Use ONLY for whole-page clones or audits where you really need every widget at once. For remakes, edits, or structure understanding prefer the default skeleton + element_id drill. Defaults to false. |
Elementor reads
| Ability | What it does |
|---|---|
wppilot/elementor-get-dynamic-tagGet Elementor Dynamic Tag | Reads the configuration of a single Elementor Dynamic Tag by name. Returns its controls (the parameters the tag accepts) so the caller can know what to pass in tag_settings when applying it. |
wppilot/elementor-get-variableGet Elementor Global Variable | Reads a single Elementor v4 Global Variable by its id. Returns id, label, type, and value. |
wppilot/elementor-list-dynamic-tagsList Elementor Dynamic Tags | Lists Elementor Dynamic Tags registered on this site (core, Pro, third-party). Each entry includes name, title, group, categories, content_type, and a flag whether the tag requires settings. Returns the list of tag groups too so you can pick a group and drill into its tags by name. Progressive disclosure: the full list is ~4KB (38+ tags); prefer group: "post" (or any registered group) or categories: ["url"] to filter server-side when you know what you're looking for. |
wppilot/elementor-list-global-classesList Elementor Global Classes | Lists every Elementor v4 Global Class registered on this site. Returns each class's id, label, type, and style variants. |
wppilot/elementor-list-interactionsList Elementor Interactions | Lists every interaction (animation, hover effect, scroll effect) attached to a specific atomic widget on a page. Returns each interaction with its trigger, effect, type, direction, duration, delay, and easing. |
wppilot/elementor-list-v3-stylesList Elementor v3 Global Styles | Lists every Elementor v3 Global Color and Global Typography stored in the active Kit. Returns four arrays: system_colors, custom_colors, system_typography, custom_typography. |
wppilot/elementor-list-variablesList Elementor Global Variables | Lists every Elementor v4 Global Variable (design token) defined on this site. Each entry includes id, label, type (color / font / size), and value. |
wppilot/elementor-get-formGet Elementor Form | Returns one Elementor Pro form in full: every field with its id, type, label, placeholder and whether it is required; the after-submit actions; and the settings belonging to those actions, such as the address an email goes to or the URL a webhook posts to. The field ids matter beyond the form — they are the column names a submission is stored under, so renaming one silently orphans every entry already collected under the old id. |
wppilot/elementor-get-form-submissionGet Elementor Form Submission | Returns one Elementor Pro form submission with the values the visitor actually entered, plus what happened to it afterwards — which after-submit actions ran and whether each succeeded. That log is the answer to "they filled in the form but we never got the email": the entry is stored, and the email action failed. Personal data, so read one at a time and only when there is a reason to. |
wppilot/elementor-get-popup-schemaGet Elementor Popup Schema | Describes the trigger and timing settings a popup accepts on this site, read live from Elementor's own control stacks. The naming rule is not guessable and is the usual reason a write is rejected: each group is switched on by a control named exactly after the group — page_load, scrolling, exit_intent, sessions, times — and every setting belonging to that group is prefixed with the group name, so the delay on page load is page_load_delay and the period on times is times_period. Read this before calling wppilot/elementor-set-popup-settings. |
wppilot/elementor-get-popup-settingsGet Elementor Popup Settings | Returns one popup's stored triggers and timing, which groups those values actually switch on, its display conditions, and whether the popup is armed — meaning it has both a trigger and a condition and can therefore appear. |
wppilot/elementor-list-condition-schemaList Elementor Condition Schema | Describes the display-condition vocabulary this site actually registered, which is what wppilot/elementor-set-template-conditions validates against. The list is not fixed: WooCommerce contributes product, product_cat, shop_page and a dozen more, and other plugins can register their own, so guessing from memory produces conditions this site will reject. Each entry carries its name, its human label, the label Elementor shows for the "all of them" case, and the sub-condition names it accepts. |
wppilot/elementor-list-custom-codeList Elementor Custom Code | Lists Elementor Pro Custom Code snippets — the markup injected into the head or body of the site's pages — with where each one is injected, its priority, whether it is published, and whether it is limited by display conditions. A published snippet with no conditions runs on every page of the site. Code bodies are omitted unless asked for, since a tracking snippet often carries keys. Read-only, but reported here because knowing what already injects into every page is the first step before adding another. |
wppilot/elementor-list-form-submissionsList Elementor Form Submissions | Reads what people have actually sent through Elementor Pro forms, from Elementor's own submissions tables. Filter by form, by status, or by a search term. Field values are omitted from the listing by default and returned by wppilot/elementor-get-form-submission for one entry at a time — a submissions table is personal data, and returning fifty people's messages to answer "how many enquiries came in" is not a fair trade. Read-only: there is no ability here that deletes a submission. |
wppilot/elementor-list-formsList Elementor Forms | Finds every Elementor Pro form on the site and reports what each one does with a submission: its fields, its after-submit actions, whether entries are stored in the database at all, and whether anybody is emailed. A form set to email only keeps no record, so its entries exist solely in whatever inbox received them — worth knowing before telling somebody their enquiries are safe. Each result carries the post_id and element_id needed by the other form abilities. |
wppilot/elementor-list-popupsList Elementor Popups | Lists every Elementor Pro popup with the two facts that decide whether it can ever be seen: which triggers are switched on, and whether it has display conditions. A popup needs both. Triggers with no conditions is the common half-finished state — Elementor shows the popup as published, the trigger looks correct in the editor, and the popup is never printed on any page. The armed flag is true only when a popup has at least one trigger and at least one condition. |
wppilot/elementor-list-template-conditionsList Elementor Template Conditions | Returns the display conditions attached to an Elementor Theme Builder document, plus the location it competes for (header, footer, archive, single, popup). A theme document with an empty condition list renders nowhere — for a header or footer that is the single most common reason a site appears to have lost one. Call wppilot/elementor-list-condition-schema for the vocabulary this site accepts, and wppilot/elementor-set-template-conditions to change it. |
wppilot/elementor-list-templatesList Elementor Templates | Lists Elementor library templates and Theme Builder documents — saved pages and sections, plus headers, footers, archives, single templates and 404s. Each entry carries the template_id, which is an ordinary post id: pass it to wppilot/elementor-get-content to read the document, to wppilot/elementor-edit-element to change it, or to wppilot/elementor-apply-template to place it on a page. This is the dedicated Elementor inventory for Theme Builder documents; they use a different post type from ordinary pages. Filter with type (header, footer, section, page, …) or scope ("theme" for Theme Builder documents, "library" for saved templates). |
wppilot/elementor-preview-template-conditionsPreview Elementor Template Conditions | Reports which Theme Builder document actually wins each location on this site, and which documents are competing for it. Conditions are easy to write and hard to reason about: two headers can both claim "entire site", both look correct in every listing, and only one is ever displayed. This answers the question the editor cannot — for header, footer, archive, single and popup, which documents claim the slot, what each one claims, and which one Elementor resolves to. Read-only. |
Elementor writes
| Ability | What it does |
|---|---|
wppilot/elementor-add-interactionAdd Elementor Interaction | Adds an interaction (animation, hover effect, scroll effect) to an atomic widget. Required: trigger (load/scrollIn/scrollOut/scrollOn/hover/click) and effect (fade/slide/scale/custom). Optional: type (in/out), direction, duration, delay, easing. |
wppilot/elementor-apply-dynamic-tagApply Elementor Dynamic Tag | Attaches an Elementor Dynamic Tag to a specific setting on a widget on a page. Validation runs server-side: if the target element does not exist, its widget type is unknown, or setting_name is not a real control on the widget the call fails HARD with the compact schema of the target widget INLINE in the error so you can correct and retry. Auto-detects v3 vs v4 atomic format and writes the appropriate shape. |
wppilot/elementor-apply-global-classApply Elementor Global Class | Attaches an existing Elementor v4 Global Class to an atomic widget on a page. Validation runs server-side: if the target element does not exist, is not an atomic widget, or does not expose a "classes" control the call fails HARD with the compact schema of the target widget INLINE in the error so you can correct and retry. Global Classes are a v4-only concept; v3 widgets cannot accept them. |
wppilot/elementor-create-global-classCreate Elementor Global Class | Creates a new Elementor v4 Global Class. The "styles" payload is a map of CSS property name → value. Scalar values are auto-wrapped against the v4 Style Schema (e.g. color:"#111" → {$$type:"color",value:"#111"}; padding:24 → {$$type:"size",value:{size:24,unit:"px"}}; padding:{block-start:24, inline-end:24, ...} → wrapped dimensions); long-form {$$type, value} shapes also work. After wrapping, the payload is validated against the authoritative Style Schema and rejected fail-hard with the list of valid properties on any mismatch. Call wppilot/elementor-get-style-schema to discover which CSS properties exist and their exact shapes. Example (ergonomic): {"color":"#111", "padding":{"block-start":24,"inline-end":24,"block-end":24,"inline-start":24}}. Returns the new class id on success. |
wppilot/elementor-create-v3-colorCreate Elementor v3 Global Color | Creates a new custom Global Color in the active Elementor v3 Kit. Provide title and color (hex). |
wppilot/elementor-create-v3-typographyCreate Elementor v3 Global Typography | Creates a new custom Global Typography in the active Elementor v3 Kit. Provide title and any of font_family, font_size, font_weight, text_transform, font_style, text_decoration, line_height, letter_spacing. Size-based fields take {size, unit}: numeric size + standard unit (px/em/rem/vw/vh/%), OR string size + unit:"custom" for raw CSS like clamp(1rem, 2vw, 2.5rem). |
wppilot/elementor-create-variableCreate Elementor Global Variable | Creates a new Elementor v4 Global Variable (design token). Provide a label (no spaces, max 50 chars), a type (color / font / size), and a value. The value format depends on the type: hex like "#ff0000" for color, font family name like "Inter" for font, and for size either a CSS dimension like "24px" / "1.5rem" or a CSS expression like "clamp(1rem, 2vw, 2rem)" / "calc(100vh - 4rem)" / "min(...)" / "max(...)" / "var(--token)". |
wppilot/elementor-edit-global-classEdit Elementor Global Class | Edits an existing Elementor v4 Global Class in place. Pass class_id and at least one of label (rename) or styles (replace the BASE variant's CSS - tablet/mobile/widescreen/state variants of this class are preserved). The class id is preserved so widgets that already reference it keep their binding. The "styles" payload follows the same auto-wrap + fail-hard validation as create-global-class: scalar values are wrapped against the Style Schema (e.g. color:"#111", padding:24), or pass the long-form {$$type, value} shape. Call wppilot/elementor-get-style-schema to discover valid property names and shapes. |
wppilot/elementor-edit-v3-colorEdit Elementor v3 Global Color | Edits an existing v3 Global Color in place. Pass color_id and any of title or color (hex) to update. The color id is preserved. |
wppilot/elementor-edit-v3-typographyEdit Elementor v3 Global Typography | Edits an existing v3 Global Typography preset in place. Pass typography_id and any of the typography fields you want to change. The id is preserved. Size-based fields take {size, unit}: numeric size + standard unit (px/em/rem/vw/vh/%), OR string size + unit:"custom" for raw CSS like clamp(1rem, 2vw, 2.5rem). |
wppilot/elementor-edit-variableEdit Elementor Global Variable | Edits an existing Elementor v4 Global Variable in place. Pass variable_id and at least one of label or value to change. The variable id is preserved so widgets and classes that reference it keep their binding. Type cannot be changed (delete and recreate if you need to switch type). |
wppilot/elementor-fix-outputFix Elementor Output | Converts HTML widgets on an Elementor page into native widgets, so the content can be edited in the panel: h1-h6 become Heading widgets, paragraphs and lists a Text Editor, links styled as buttons (class btn/button/cta) a Button, images an Image (linked to the media library when the file is the site's own); plain wrapper divs are opened up. HTML widgets holding scripts, styles, iframes, forms, SVG, video or tables are left alone, each with the reason. Inline styles, classes and IDs are dropped, so restyle with the widgets' controls afterwards. dry_run (default true) reports what would change; send dry_run false to apply. element_ids limits it to some HTML widgets. Undo restores the page's previous Elementor data. Run wppilot/elementor-audit-output before and after. |
wppilot/elementor-compile-specCompile Design Spec | Turn a design's reproduction spec into Elementor global classes, one per role, generated from the measurements rather than typed out by hand. Produces a class for every surface, every layout and every type role on every surface, and returns the role => class id map to build with. Classes are found by role name on each run, so compiling a second time updates the classes existing pages already reference instead of creating a parallel set: change the spec, compile again, and every page built from it moves with it. Call this after wppilot/save-design-spec and before wppilot/elementor-build-page, then build using role on nodes instead of class ids. |
wppilot/elementor-create-popupCreate Elementor Popup | Creates an Elementor Pro popup and, in the same call, arms it: triggers, timing and display conditions together. All three are optional, but a popup is only ever seen when it has a trigger and a condition, so creating one without them produces a document that looks finished and appears nowhere — the response says so plainly rather than reporting a bare success. Content is added afterwards with wppilot/elementor-set-content or wppilot/elementor-add-element, using the returned popup_id as the post id. |
wppilot/elementor-edit-formEdit Elementor Form | Changes an Elementor Pro form: its name, its fields, its after-submit actions, and the settings those actions use. Fields replace the existing set when supplied, so send the whole list — read it first with wppilot/elementor-get-form. Field ids are the column names submissions are stored under: renaming one leaves every entry already collected under the old id unreachable from the form, so this refuses to rename a field on a form that already has stored submissions unless allow_field_id_changes is set. Actions are validated against what this site actually registers, so an integration that is not installed is refused rather than saved into a form that will never run it. |
wppilot/elementor-place-stock-imagePlace Stock Image in Elementor | Searches Openverse for an openly-licensed image, imports the chosen result into the media library with its attribution intact, and sets it on an Elementor element — an image widget, or any element whose setting takes an image. One call instead of search, import and edit. The licence and the ready-made attribution string come back in the response and are written into the attachment's caption, so the source and licence information remain available. Review the returned licence and display the required attribution where the image is used; storing a caption alone does not establish compliance. Pass result_index to take a later search result rather than the first. To choose from a list yourself, use wppilot/search-images and wppilot/import-media-url separately. |
wppilot/elementor-save-custom-codeSave Elementor Custom Code | Creates or updates an Elementor Pro Custom Code snippet: arbitrary markup injected into the head or body of the site's pages. Pass snippet_id to update an existing one, omit it to create. This executes whatever is given, on every page the snippet applies to, for every visitor — a script tag here is the same power as editing the theme's header. New snippets are created as drafts unless publishing is asked for, and a snippet with no display conditions runs site-wide; limit it with wppilot/elementor-set-template-conditions. Prefer a page-level or element-level solution where one exists: wppilot/elementor-set-page-settings writes page CSS, and wppilot/elementor-edit-element writes CSS for one element. |
wppilot/elementor-save-templateSave Elementor Template | Saves a whole page, or one element and everything under it, as a reusable Elementor template. Pass post_id alone to save the entire document; add element_id to save just that subtree, which is how a section a client approved becomes something you can drop onto the next page. The saved copy gets fresh ids, so applying it repeatedly never collides with the original or with earlier copies. type defaults to "section" for a subtree and "page" for a whole document; pass header, footer, archive or single to create a Theme Builder document instead — note that a new Theme Builder document has no display conditions and shows nowhere until they are set in Elementor. |
wppilot/elementor-set-popup-settingsSet Elementor Popup Settings | Writes a popup's triggers and timing. Both are merged into what is already stored, so sending only {"page_load": "yes", "page_load_delay": 3} leaves existing timing rules alone. Every key is checked against Elementor's live control list for that group, and an unknown key is refused with the valid names rather than silently dropped — a misspelled trigger that saves cleanly and never fires is the worst outcome here. Switching a group on means setting the control named after the group to "yes". The response warns when the popup still has no display conditions, because triggers alone never make a popup appear. |
wppilot/elementor-set-template-conditionsSet Elementor Template Conditions | Replaces the display conditions on an Elementor Theme Builder document, which is what actually puts a header, footer, archive or single template on the front end. Pass the complete desired list: this replaces, it does not merge, and an empty list clears every condition and takes the document off the site. Each condition is {type, name, sub_name, sub_id} — for example {"type":"include","name":"general"} for the entire site, {"type":"include","name":"singular","sub_name":"page"} for every page, or {"type":"exclude","name":"singular","sub_name":"post","sub_id":"45"} to carve one post out. Names are validated against what this site actually registered, so WooCommerce conditions appear on a store and nowhere else — call wppilot/elementor-list-condition-schema first. Conflicts with other documents competing for the same location are reported rather than refused, matching Elementor's own behaviour. |
wppilot/elementor-upload-svgUpload SVG for Elementor | Sanitises an SVG and adds it to the media library so Elementor's icon controls can use it. Supply either markup directly or a URL to fetch. Script tags, event handlers and external references are stripped by Elementor's own sanitiser before the file is written; gradients, filters and clip paths survive, so a real logo comes through intact. Returns an attachment id and the library_id to pass to an icon widget's icon setting with library "svg". This does not enable site-wide SVG uploading — that is a separate security decision and stays with the site owner. |
Destructive Elementor calls
| Ability | What it does |
|---|---|
wppilot/elementor-create-atomic-widgetCreate Elementor Atomic Widget | Creates or regenerates an Elementor v4 ATOMIC widget (PHP class + Twig template + loader) as a mu-plugin. This ability only targets atomic (v4) widgets - it does not generate legacy v3 widgets. IMPORTANT: before creating a new widget, use wppilot/elementor-get-schema action "list" to check if a similar widget already exists in Elementor core, Pro, or third-party plugins. Styling surfaces: "base_styles" emits Style-tab-editable defaults (maps to define_base_styles() - same shape as wppilot/elementor-create-global-class's "styles", validated against the v4 Style Schema); "css" emits static shell CSS as a linked stylesheet. Default is no base styles and no CSS - the widget renders as bare content. Do NOT inline <style> blocks in the Twig - they duplicate on every render. To iterate on an existing widget, pass overwrite:true - regenerates every file from the input and destroys any hand edits to wppilot-widget.php, the Twig, the loader, or the JS/CSS assets. Callers must re-supply the full props/twig/js/css/base_styles each time since this is a full regeneration, not a patch. |
wppilot/elementor-delete-element-styleDelete Elementor Element Style | Removes a single per-element style entry (identified by style_id) from an atomic v4 element. Surgical tool for pruning one style without rewriting the full styles map. Use wppilot/elementor-edit-element with replace=true and styles={} if you want to clear every style on the element. Idempotent: deleting a style_id that is not present returns success with deleted=false. |
wppilot/elementor-delete-global-classDelete Elementor Global Class | Deletes an Elementor v4 Global Class by id. Widgets that still reference it will lose the styling but will not break - Elementor ignores missing class references at render. |
wppilot/elementor-delete-interactionDelete Elementor Interaction | Deletes an interaction from an atomic widget by its zero-based index in the widget's interactions array. Use list-interactions first to discover the indices. |
wppilot/elementor-delete-v3-colorDelete Elementor v3 Global Color | Deletes a v3 Global Color from the active Kit by _id. System colors cannot be deleted. |
wppilot/elementor-delete-v3-typographyDelete Elementor v3 Global Typography | Deletes a v3 Global Typography preset from the active Kit by _id. System typography presets cannot be deleted. |
wppilot/elementor-delete-variableDelete Elementor Global Variable | Deletes an Elementor v4 Global Variable by id. Soft delete - the entity is marked as removed but the underlying record remains in the kit for audit purposes. |
wppilot/elementor-apply-templateApply Elementor Template | Copies a saved template into a page. The template's elements are inserted with fresh ids, so the page owns its copy and later edits to either one do not affect the other — this is an import, not a link. By default the template is appended to the end of the document; pass parent_id to insert it inside a container, position for a specific index, or replace=true to discard the page's current content first. Applying a Theme Builder document (a header, a footer) to a page copies its elements onto that page, which is rarely what is wanted — a header is displayed by its conditions, not by being pasted somewhere. |
wppilot/elementor-build-from-specBuild Page From Spec | Build a whole page from a design's reproduction spec, in one call, with no element tree written by hand. The spec says what each section is made of — a heading, a card grid of seven, a panel, a stat row, an accordion — and this turns that into the real Elementor document using the classes the spec compiled to. This is the step that makes a matched design reproducible rather than a one-off: change the spec, compile, build again, and the page follows. Requires wppilot/elementor-compile-spec to have run, because a build against an uncompiled spec would produce a correctly structured page with no styling on it. |
wppilot/elementor-build-pageBuild Elementor Page | Builds a complete Elementor page from one nested description, in a single call. Each node is {type, settings, styles, children}: type is a widget name (heading, image, e-heading) or a container type (container, e-flexbox, e-div-block), settings are that element's controls, and children nest the same shape. Ids are generated throughout. By default the page is replaced, which is what "build me a landing page" means; pass replace=false to append instead. The whole document is validated before anything is written, so a rejected widget aborts the build and returns that widget's compact schema inline rather than leaving a half-finished page. For a single element use wppilot/elementor-add-element; for an exact Elementor document use wppilot/elementor-set-content. |
wppilot/elementor-delete-custom-codeDelete Elementor Custom Code | Deletes an Elementor Pro Custom Code snippet, so its markup stops being injected. Sends it to the trash by default, which is recoverable; force removes it permanently. Read it first with wppilot/elementor-list-custom-code and include_code if the snippet holds a tracking id or key worth keeping. |
wppilot/elementor-delete-page-contentDelete Elementor Page Content | Clears all Elementor content from a post, leaving the post itself, its title and its URL in place. Use this to start a page over rather than deleting and recreating it, which would change the post id every link on the site points at. Elementor's generated CSS, page assets and element cache are cleared with it, so nothing from the old page survives into the next render. By default the post also stops being an Elementor page and falls back to the theme's rendering of its WordPress content; pass keep_builder_mode to leave it as an empty Elementor canvas ready to build into. This is destructive and requires confirmation. The change ledger records the full document, so it can be rolled back. |
For the task-level view of Elementor, with worked requests and what to check afterwards, see Elementor integration page.