elementor/move-element moves an element to a new parent and sibling position.
Source and destination are updated together, and a move into the element’s own subtree is refused.
At a glance
| Ability | elementor/move-element |
| Toolset | Elementor — toolset/elementor |
| Group | Elementor › Elements & Widgets |
| Requires | Elementor, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Not idempotent — each call changes the row set, so re-running is not a no-op |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
The cycle check
Moving a container into one of its own descendants would create a cycle: the element contains the thing that contains it. Elementor does not detect that, and the resulting document is a tree that is not a tree.
What follows is not a clean error. The editor may loop trying to render it, the serialiser may recurse until it runs out of memory, and the document is usually unrecoverable without editing the stored JSON by hand.
So the destination is checked against the source’s subtree first, and a move that would create a cycle is refused before anything is written.
The atomicity matters for the same reason. A move is a removal and an insertion, and a failure between the two would leave the element in neither place — which is data loss dressed as an error.
Not idempotent: the position is relative to the destination’s current children, so the same call twice does not mean the same thing.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
post_id | integer | Yes | The post holding the Elementor document. |
element_id | string | Yes | The seven-character hex element ID. |
new_parent_id | string | null | No | The destination parent, or null for the root. |
position | integer | No | Index among the destination’s children. |
What comes back
| Name | Type | What it is |
|---|---|---|
post_id | integer | The post written. |
element_id | string | The ID of the element created or affected. |
element | object | The element as stored. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Move that heading into the first container.
It resolves to one call:
{
"ability": "elementor/move-element",
"parameters": {
"post_id": 412,
"element_id": "a1b2c3d",
"new_parent_id": "e4f5g6h",
"position": 0
}
}Worth knowing
- A move into the element’s own subtree is refused — it would corrupt the document.
- Atomic: the element is never in neither place.
- The element keeps its ID and its children.
- Not idempotent — position is relative to current children.
Related abilities
- Get Elementor Element — get the path before moving
- Reorder Elementor Elements — reorder within one parent instead
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category