Skip to content

Elementor Addons

New in v3.6.0. If you build with Elementor addon packs, your AI had a blind spot: it could see Elementor’s own widgets but not one of the hundreds your addons installed. Ask for a pricing table and it would hand-build one out of containers while a finished addon widget sat unused.

These tools close that gap. All three integrations are Pro, and each registers only when its plugin is active.

PluginToolsShape
Essential Addons for Elementoressential-addons-readDiscovery only
Premium Addons for Elementorpremium-addons-readDiscovery only
Ultimate Addons for Elementor (UAE)uae-read / uae-writeWidget pack and template plugin

Most EMCP plugin integrations give you a matching Read/Write pair. This one deliberately does not, and it is worth understanding why.

Essential Addons and Premium Addons get a read tool only. Their widgets register into Elementor’s own widget registry, which means EMCP can already place them with the standard add-free-widget tool. What was missing was never placement, it was discovery: list-widgets serves EMCP’s curated core catalog, so an agent had no way to learn that eael-pricing-table or premium-addon-banner exist at all.

So the workflow is discover, inspect, then place with the normal tool:

// 1. Discover. Filter with `search` or `category`.
essential-addons-read({ operation: "list-widgets", arguments: { search: "pricing" } })
// → { count, widgets: [ { type: "eael-pricing-table", title: "Pricing Table", … } ] }
// 2. Inspect the controls that carry content.
essential-addons-read({ operation: "get-widget-schema", arguments: { type: "eael-pricing-table" } })
// 3. Place it with the ordinary widget tool.
add-free-widget({ post_id, parent_id, widget_type: "eael-pricing-table", settings: { } })

There is no add-widget operation on these tools, and adding one would only duplicate a path that already works.

Addon widgets are enormous. On a stock install, eael-pricing-table reports 456 controls, eael-adv-accordion 467, and premium-addon-banner 391. Handing all of that to an AI would flood its context window and crowd out your actual instructions.

So get-widget-schema returns only content-bearing controls by default, the ones that hold your text, images, links, prices and repeater rows. Everything else is styling chrome: sliders, switchers, colour pickers, popover toggles.

  • Default: the controls you need to populate the widget.
  • full: true: every control including styling. Use it when you specifically need a styling control name, and expect a large response.
  • types: ["a", "b"]: inspect several widgets in one call.

Each response reports total_controls and shown, so you can always tell when you are seeing a subset.

UAE is the one integration here that is both shapes at once, because between its two plugins (see the note above) it registers widgets like the packs above (hfe-* from the free plugin, uael-* from UAE Pro) and stores header, footer and block templates with display conditions. So its read tool covers both jobs, and it is the only one with a write tool.

The exact surface depends on what is installed. list-widgets and get-widget-schema are always there. list-templates, get-template and the uae-write tool appear only when the free plugin (the template owner) is active, so a site running only UAE Pro sees widget discovery and nothing template-related.

OperationPurpose
list-widgetsUAE’s registered widgets. Place them with add-free-widget.
get-widget-schemaContent-bearing controls for a widget by type (or types).
list-templatesTemplates with type, status and display conditions. Filter with type.
get-templateOne template, plus user-role targeting and whether it has content yet.
OperationPurpose
create-templatetitle + type (header, footer, before_footer, custom).
update-templateChange title, status or type.
set-display-conditionsinclude, optional exclude, optional user_roles.
delete-templateRequires confirm: true. force: true bypasses trash.

The template record and its content are separate steps

Section titled “The template record and its content are separate steps”

create-template creates the record, it does not build the header. You build the content with the ordinary Elementor tools, using the returned template_id as the post_id:

// 1. Create the record.
uae-write({ operation: "create-template", arguments: { title: "Main Header", type: "header" } })
// → { template_id: 812 }
// 2. Decide where it appears.
uae-write({ operation: "set-display-conditions",
arguments: { template_id: 812, include: ["entire-website"] } })
// 3. Build the actual header with the normal tools.
add-container({ post_id: 812, })
add-free-widget({ post_id: 812, parent_id: "", widget_type: "nav-menu", })

uae-write renders site-wide: a bad header or footer affects every page on your site. So it ships disabled by default and must be switched on under EMCP Tools → Tools → Elementor Addons. delete-template additionally requires an explicit confirm: true.

While building, prefer status: "draft" and confirm the display conditions with get-template before you publish.

EMCP Themer is EMCP’s own builder-agnostic theme builder, and it does the same job as UAE’s header and footer templates. Two systems claiming the same header slot fight at render time, which shows up as a mysterious double header.

If both are active, EMCP Tools shows an admin notice explaining the clash and asks you to pick one. Until you do, it resolves the conflict per slot, with Themer taking priority: where Themer has a matching template, its header or footer renders and UAE’s is skipped. Any slot Themer does not claim still renders from UAE, so an existing UAE-only footer keeps working.

The two are deliberately not wired together, and you should not try to mirror templates between them. Use UAE on sites that already run it; use Themer where it is the site’s theme-building system.