@respira/wordpress-mcp-server 7.2.18 → 7.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/acf-tools.d.ts +0 -10
- package/dist/acf-tools.d.ts.map +1 -1
- package/dist/acf-tools.js +0 -15
- package/dist/acf-tools.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -36
- package/dist/config.js.map +1 -1
- package/dist/server.d.ts +0 -47
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1155 -605
- package/dist/server.js.map +1 -1
- package/dist/wordpress-client.d.ts +61 -29
- package/dist/wordpress-client.d.ts.map +1 -1
- package/dist/wordpress-client.js +271 -148
- package/dist/wordpress-client.js.map +1 -1
- package/package.json +2 -2
- package/skills/activity-report-composer/README.md +38 -0
- package/skills/activity-report-composer/SKILL.md +167 -0
- package/skills/activity-report-composer/metadata.json +42 -0
- package/skills/brand-voice-synthesizer/README.md +43 -0
- package/skills/brand-voice-synthesizer/SKILL.md +259 -0
- package/skills/brand-voice-synthesizer/metadata.json +46 -0
- package/skills/build-oxygen6-page/SKILL.md +59 -0
- package/skills/conversion-audit/README.md +37 -0
- package/skills/conversion-audit/SKILL.md +185 -0
- package/skills/conversion-audit/metadata.json +46 -0
- package/skills/custom-post-type-architect/README.md +34 -0
- package/skills/custom-post-type-architect/SKILL.md +158 -0
- package/skills/custom-post-type-architect/metadata.json +39 -0
- package/skills/design-system-synthesizer/README.md +46 -0
- package/skills/design-system-synthesizer/SKILL.md +395 -0
- package/skills/design-system-synthesizer/metadata.json +57 -0
- package/skills/figma-to-elementor/SKILL.md +204 -0
- package/skills/html-to-bricks/README.md +43 -0
- package/skills/html-to-bricks/SKILL.md +135 -0
- package/skills/html-to-bricks/metadata.json +41 -0
- package/skills/internal-link-builder/SKILL.md +258 -0
- package/skills/internal-link-builder/metadata.json +46 -0
- package/skills/migrate-beaver-builder-to-bricks/SKILL.md +251 -0
- package/skills/migrate-beaver-builder-to-gutenberg/SKILL.md +248 -0
- package/skills/migrate-brizy-to-gutenberg/SKILL.md +248 -0
- package/skills/migrate-divi-to-breakdance/SKILL.md +312 -0
- package/skills/migrate-divi-to-bricks/SKILL.md +321 -0
- package/skills/migrate-divi-to-gutenberg/SKILL.md +328 -0
- package/skills/migrate-elementor-to-breakdance/SKILL.md +287 -0
- package/skills/migrate-elementor-to-bricks/SKILL.md +289 -0
- package/skills/migrate-elementor-to-gutenberg/SKILL.md +327 -0
- package/skills/migrate-elementor-to-oxygen/SKILL.md +300 -0
- package/skills/migrate-oxygen-to-breakdance/SKILL.md +235 -0
- package/skills/migrate-oxygen-to-bricks/SKILL.md +237 -0
- package/skills/migrate-thrive-architect-to-gutenberg/SKILL.md +257 -0
- package/skills/migrate-visual-composer-to-gutenberg/SKILL.md +261 -0
- package/skills/migrate-wpbakery-to-bricks/SKILL.md +336 -0
- package/skills/migrate-wpbakery-to-gutenberg/SKILL.md +345 -0
- package/skills/mobile-experience-report/SKILL.md +719 -0
- package/skills/mobile-experience-report/telemetry.ts +137 -0
- package/skills/page-template-library/README.md +41 -0
- package/skills/page-template-library/SKILL.md +175 -0
- package/skills/page-template-library/metadata.json +44 -0
- package/skills/prime-the-agent/README.md +49 -0
- package/skills/prime-the-agent/SKILL.md +225 -0
- package/skills/prime-the-agent/metadata.json +46 -0
- package/skills/respira-setup-assistant/SKILL.md +386 -0
- package/skills/respira-setup-assistant/metadata.json +36 -0
- package/skills/seo-aeo-amplifier/README.md +61 -0
- package/skills/seo-aeo-amplifier/SKILL.md +277 -0
- package/skills/seo-aeo-amplifier/metadata.json +62 -0
- package/skills/stale-content-detector/README.md +41 -0
- package/skills/stale-content-detector/SKILL.md +156 -0
- package/skills/stale-content-detector/metadata.json +43 -0
- package/skills/technical-debt-audit/SKILL.md +691 -0
- package/skills/technical-debt-audit/telemetry.ts +142 -0
- package/skills/woocommerce-health-check/SKILL.md +719 -0
- package/skills/woocommerce-health-check/telemetry.ts +137 -0
- package/skills/wordpress-ai-image-optimizer/README.md +49 -0
- package/skills/wordpress-ai-image-optimizer/SKILL.md +232 -0
- package/skills/wordpress-ai-image-optimizer/metadata.json +63 -0
- package/skills/wordpress-site-dna/README.md +81 -0
- package/skills/wordpress-site-dna/SKILL.md +669 -0
- package/skills/wordpress-site-dna/telemetry.ts +137 -0
- package/dist/__tests__/acf-tool-routing.test.d.ts +0 -2
- package/dist/__tests__/acf-tool-routing.test.d.ts.map +0 -1
- package/dist/__tests__/acf-tool-routing.test.js +0 -37
- package/dist/__tests__/acf-tool-routing.test.js.map +0 -1
- package/dist/__tests__/cowork-bootstrap.test.d.ts +0 -2
- package/dist/__tests__/cowork-bootstrap.test.d.ts.map +0 -1
- package/dist/__tests__/cowork-bootstrap.test.js +0 -61
- package/dist/__tests__/cowork-bootstrap.test.js.map +0 -1
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Migrate Elementor to Gutenberg
|
|
2
|
+
|
|
3
|
+
**Version:** 2.0.0
|
|
4
|
+
**Updated:** 2026-06-30
|
|
5
|
+
**Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing draft-duplicate path is kept. After the initial content write, validation issues (block nesting, broken refs) are corrected surgically with `respira_find_element` + `respira_update_element` (and `respira_batch_update` for multi-block or multi-page fixes) instead of rewriting whole pages. Snapshot restore and draft deletion are now explicit rollback paths. Reflects the current 16 supported builders.
|
|
6
|
+
|
|
7
|
+
Converts Elementor-built WordPress pages to native Gutenberg blocks. Reads Elementor's JSON widget tree from post meta, maps each widget to its closest core block equivalent, generates a migration plan for approval, and writes clean block markup to the target pages. Use this skill whenever someone wants to move from Elementor to Gutenberg, eliminate page builder dependencies, go back to native WordPress blocks, or simplify their tech stack by dropping Elementor.
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Moving from Elementor to Gutenberg is one of the most common — and most complex — builder migrations. Elementor stores content as a deeply nested JSON tree in `_elementor_data`, while Gutenberg uses HTML comments (`<!-- wp:block -->`) inline with content in `post_content`. Every layout decision Elementor makes with JSON settings must be translated into block attributes, CSS classes, or Group/Columns block structures.
|
|
12
|
+
|
|
13
|
+
This skill handles that translation systematically: it reads every Elementor widget, finds the right Gutenberg block, maps settings as closely as possible, and flags anything that needs manual attention. The result is clean, dependency-free WordPress content. Elementor and Gutenberg are both among the 16 page builders Respira reads and writes natively, so extraction and the block write run through the same builder-aware tooling Respira uses everywhere else.
|
|
14
|
+
|
|
15
|
+
**Handles:**
|
|
16
|
+
- Section/Column layouts → Group and Columns blocks with appropriate width settings
|
|
17
|
+
- Text Editor → Paragraph blocks (preserving inline formatting)
|
|
18
|
+
- Heading → Heading block (h1-h6 mapping)
|
|
19
|
+
- Image → Image block (with alt text, caption, link)
|
|
20
|
+
- Video → Video or Embed block (YouTube/Vimeo detected)
|
|
21
|
+
- Button → Buttons block (with link, style, colors)
|
|
22
|
+
- Icon List → List block
|
|
23
|
+
- Spacer → Spacer block
|
|
24
|
+
- Divider → Separator block
|
|
25
|
+
- Google Maps → Custom HTML block with embed
|
|
26
|
+
- Tabs, Accordion → Group blocks with Details block (WP 6.3+) or HTML fallback
|
|
27
|
+
- Image Gallery → Gallery block
|
|
28
|
+
- Counter, Progress Bar → HTML or Group block approximations
|
|
29
|
+
- Custom HTML → Custom HTML block (direct transfer)
|
|
30
|
+
- Responsive visibility → block-level responsive classes (theme-dependent)
|
|
31
|
+
|
|
32
|
+
**Preserves:**
|
|
33
|
+
- All text content, headings, and inline formatting (bold, italic, links)
|
|
34
|
+
- Image URLs, alt text, captions, and link targets
|
|
35
|
+
- Button labels, URLs, and target attributes
|
|
36
|
+
- Color values applied as block-level styles
|
|
37
|
+
- Basic spacing via Spacer blocks
|
|
38
|
+
- Heading hierarchy (h1-h6)
|
|
39
|
+
- List content and structure
|
|
40
|
+
- Embedded media URLs
|
|
41
|
+
|
|
42
|
+
## What This Skill Does NOT Do
|
|
43
|
+
|
|
44
|
+
- **Complex multi-column layouts** — Elementor allows pixel-level column width control and nested sections. Gutenberg Columns blocks support percentage widths but with less precision. Complex grid layouts may need manual adjustment or a block-based layout plugin.
|
|
45
|
+
- **Elementor Pro widgets** — Posts grid, portfolio, price table, price list, flip box, call to action, and similar Pro widgets have no core Gutenberg equivalent. They are flagged for manual recreation.
|
|
46
|
+
- **Third-party addon widgets** — Essential Addons, JetElements, Crocoblock widgets cannot be auto-mapped.
|
|
47
|
+
- **Dynamic content** — ACF fields, custom loops, and dynamic tags require separate solutions (ACF blocks, custom block patterns, or Query Loop block).
|
|
48
|
+
- **Theme Builder templates** — Headers, footers, archive templates are outside page content scope.
|
|
49
|
+
- **Advanced animations** — Motion effects, parallax scrolling, entrance animations have no Gutenberg equivalent.
|
|
50
|
+
- **Form widgets** — Elementor forms need a forms plugin replacement (WPForms, Gravity Forms, etc.).
|
|
51
|
+
- **Popup content** — Elementor popups are not page content and are excluded.
|
|
52
|
+
- **Design fidelity** — Gutenberg is intentionally simpler. Expect a cleaner but less visually identical result. This is a feature, not a bug — you are trading design complexity for simplicity and performance.
|
|
53
|
+
|
|
54
|
+
## Requirements
|
|
55
|
+
|
|
56
|
+
- Respira for WordPress plugin installed and connected
|
|
57
|
+
- MCP connection active (desktop or WebMCP)
|
|
58
|
+
- Elementor plugin active (to read source content)
|
|
59
|
+
- WordPress 6.0+ (for modern block features; 6.3+ recommended for Details block)
|
|
60
|
+
- A block-compatible theme (Twenty Twenty-Three, Astra, Kadence, GeneratePress, etc.)
|
|
61
|
+
- Read access to scan Elementor content
|
|
62
|
+
- Write access to create duplicates with Gutenberg content
|
|
63
|
+
|
|
64
|
+
## Trigger Phrase
|
|
65
|
+
|
|
66
|
+
- "migrate elementor to gutenberg"
|
|
67
|
+
|
|
68
|
+
## Alternative Triggers
|
|
69
|
+
|
|
70
|
+
- "convert elementor to blocks"
|
|
71
|
+
- "switch from elementor to gutenberg"
|
|
72
|
+
- "remove elementor dependency"
|
|
73
|
+
- "go back to native wordpress"
|
|
74
|
+
- "rebuild elementor pages with blocks"
|
|
75
|
+
- "elementor to block editor"
|
|
76
|
+
- "decommission elementor"
|
|
77
|
+
|
|
78
|
+
## Source Builder: Elementor
|
|
79
|
+
|
|
80
|
+
Elementor stores page content in the `_elementor_data` post meta field as a JSON string. The structure is a nested tree:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Document
|
|
84
|
+
└─ Section (type: "section")
|
|
85
|
+
├─ settings: { structure, layout, content_width, ... }
|
|
86
|
+
└─ elements: [
|
|
87
|
+
Column (type: "column")
|
|
88
|
+
├─ settings: { _column_size, ... }
|
|
89
|
+
└─ elements: [
|
|
90
|
+
Widget (type: "widget", widgetType: "heading")
|
|
91
|
+
└─ settings: { title, size, header_size, ... }
|
|
92
|
+
]
|
|
93
|
+
]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Key Elementor specifics:
|
|
97
|
+
- **Widget types** are in the `widgetType` field (e.g., `heading`, `text-editor`, `image`, `button`)
|
|
98
|
+
- **Responsive settings** use suffixes: `margin`, `margin_tablet`, `margin_mobile`
|
|
99
|
+
- **CSS** is cached in `_elementor_css` post meta — not needed for migration but useful for verification
|
|
100
|
+
- **Page settings** in `_elementor_page_settings` (page layout, hide title, etc.)
|
|
101
|
+
- **Global widgets** reference a template via `templateID` — must be resolved before mapping
|
|
102
|
+
- **Nested sections** (Inner Section widget) create sub-layouts within columns
|
|
103
|
+
|
|
104
|
+
Read Elementor content via `respira_extract_builder_content` with `builder=elementor`.
|
|
105
|
+
|
|
106
|
+
## Target: Gutenberg (Block Editor)
|
|
107
|
+
|
|
108
|
+
Gutenberg stores content directly in `post_content` as HTML with block comment delimiters:
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<!-- wp:group {"layout":{"type":"constrained"}} -->
|
|
112
|
+
<div class="wp-block-group">
|
|
113
|
+
<!-- wp:heading {"level":2} -->
|
|
114
|
+
<h2 class="wp-block-heading">Title Here</h2>
|
|
115
|
+
<!-- /wp:heading -->
|
|
116
|
+
|
|
117
|
+
<!-- wp:paragraph -->
|
|
118
|
+
<p>Content here with <strong>formatting</strong>.</p>
|
|
119
|
+
<!-- /wp:paragraph -->
|
|
120
|
+
</div>
|
|
121
|
+
<!-- /wp:group -->
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Key Gutenberg specifics:
|
|
125
|
+
- Block attributes are JSON in the opening comment: `<!-- wp:image {"id":123,"sizeSlug":"large"} -->`
|
|
126
|
+
- Layout blocks: `wp:group`, `wp:columns`, `wp:column`
|
|
127
|
+
- Style attributes go in the block JSON: `{"style":{"color":{"background":"#fff"},"spacing":{"padding":{"top":"2rem"}}}}`
|
|
128
|
+
- No separate meta storage — everything is in `post_content`
|
|
129
|
+
- Columns use percentage widths: `<!-- wp:column {"width":"33.33%"} -->`
|
|
130
|
+
|
|
131
|
+
Write Gutenberg content via `respira_update_page` or `respira_update_post` targeting the `content` field.
|
|
132
|
+
|
|
133
|
+
## Execution Workflow
|
|
134
|
+
|
|
135
|
+
### Phase 1: Pre-Migration Audit
|
|
136
|
+
|
|
137
|
+
1. Verify Respira + MCP connection via `respira_get_site_context`. If unavailable, stop and show setup guidance.
|
|
138
|
+
2. Confirm Elementor is active via `respira_list_plugins`.
|
|
139
|
+
3. Check WordPress version (6.0+ required, 6.3+ ideal).
|
|
140
|
+
4. Identify active theme — note if it is block-theme compatible.
|
|
141
|
+
5. Inventory and scope the source pages with `respira_find_builder_targets` (builder=elementor) — a fast, ranked list of every Elementor-built page/post before you touch anything. Fall back to `respira_list_pages` / `respira_list_posts` + `respira_get_builder_info` to confirm builder per item where needed.
|
|
142
|
+
6. For each Elementor page, extract content via `respira_extract_builder_content` with `builder=elementor`
|
|
143
|
+
7. Build an inventory:
|
|
144
|
+
- Total pages/posts using Elementor
|
|
145
|
+
- Widget types used (frequency count)
|
|
146
|
+
- Pro-only widgets detected
|
|
147
|
+
- Third-party addon widgets detected
|
|
148
|
+
- Dynamic tags and global widgets
|
|
149
|
+
- Layout complexity score per page (nesting depth, column configurations)
|
|
150
|
+
- Estimated migration complexity (simple/moderate/complex)
|
|
151
|
+
|
|
152
|
+
### Phase 2: Migration Plan
|
|
153
|
+
|
|
154
|
+
Present a detailed plan acknowledging that Gutenberg migration involves the most interpretation:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
## Elementor → Gutenberg Migration Plan
|
|
158
|
+
|
|
159
|
+
### Important Context
|
|
160
|
+
Gutenberg is intentionally simpler than Elementor. This migration prioritizes
|
|
161
|
+
content preservation and clean markup over pixel-perfect layout recreation.
|
|
162
|
+
Some design adjustments will be needed post-migration.
|
|
163
|
+
|
|
164
|
+
### Site Inventory
|
|
165
|
+
- Total Elementor pages: X
|
|
166
|
+
- Total widgets to convert: X
|
|
167
|
+
- Direct block equivalents: X (Y%)
|
|
168
|
+
- Approximate equivalents (layout may differ): X (Y%)
|
|
169
|
+
- No equivalent — manual recreation needed: X (Y%)
|
|
170
|
+
|
|
171
|
+
### Widget Mapping Summary
|
|
172
|
+
| Elementor Widget | Gutenberg Block | Fidelity |
|
|
173
|
+
|-----------------|----------------|----------|
|
|
174
|
+
| heading | wp:heading | Exact |
|
|
175
|
+
| text-editor | wp:paragraph | Exact |
|
|
176
|
+
| image | wp:image | Exact |
|
|
177
|
+
| section+columns | wp:group+columns| Close |
|
|
178
|
+
| tabs | wp:details (6.3+)| Approx |
|
|
179
|
+
| form | — | Manual |
|
|
180
|
+
|
|
181
|
+
### Layout Simplification Notes
|
|
182
|
+
- [Specific notes about how complex Elementor layouts will be simplified]
|
|
183
|
+
- [Column configurations that will change]
|
|
184
|
+
- [Sections that will become Groups]
|
|
185
|
+
|
|
186
|
+
### Page-by-Page Plan
|
|
187
|
+
1. **[Page Title]** — X widgets, [simple/moderate/complex]
|
|
188
|
+
- Direct conversions: X
|
|
189
|
+
- Approximate conversions: X
|
|
190
|
+
- Manual items: X — [details]
|
|
191
|
+
2. ...
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Ask for confirmation:
|
|
195
|
+
> This migration will produce cleaner, faster-loading pages but with simpler layouts than Elementor.
|
|
196
|
+
> 1. Migrate all pages
|
|
197
|
+
> 2. Migrate specific pages
|
|
198
|
+
> 3. Start with a test page (recommended for complex sites)
|
|
199
|
+
> 4. Just keep this plan
|
|
200
|
+
|
|
201
|
+
### Phase 3: Page-by-Page Migration
|
|
202
|
+
|
|
203
|
+
For each approved page:
|
|
204
|
+
|
|
205
|
+
1. Read full Elementor content via `respira_extract_builder_content` with `builder=elementor`
|
|
206
|
+
2. Walk the Elementor JSON tree depth-first:
|
|
207
|
+
- Convert Section → `<!-- wp:group -->` with constrained layout
|
|
208
|
+
- Convert Column structures → `<!-- wp:columns -->` and `<!-- wp:column {"width":"X%"} -->`
|
|
209
|
+
- Convert each widget to appropriate block:
|
|
210
|
+
- `heading` → `<!-- wp:heading {"level":N} --><hN>text</hN><!-- /wp:heading -->`
|
|
211
|
+
- `text-editor` → `<!-- wp:paragraph --><p>text</p><!-- /wp:paragraph -->`
|
|
212
|
+
- `image` → `<!-- wp:image {"id":N,"sizeSlug":"large"} --><figure>...</figure><!-- /wp:image -->`
|
|
213
|
+
- `button` → `<!-- wp:buttons --><div class="wp-block-buttons"><!-- wp:button -->...<!-- /wp:button --></div><!-- /wp:buttons -->`
|
|
214
|
+
- Map colors and spacing to block-level `style` attributes where possible
|
|
215
|
+
- Convert background images to Group block background or Cover block
|
|
216
|
+
- Flag unmappable widgets with `<!-- MIGRATION NOTE: [widget type] needs manual recreation -->`
|
|
217
|
+
3. Assemble complete block markup with proper nesting and closing tags
|
|
218
|
+
4. Create a duplicate page via `respira_create_page_duplicate` or `respira_create_post_duplicate`
|
|
219
|
+
5. Before writing, take a snapshot with `respira_get_snapshot` so the duplicate's pre-write state can be restored if anything goes wrong
|
|
220
|
+
6. Write block content to the duplicate via `respira_update_page` or `respira_update_post`
|
|
221
|
+
7. Surgical fix pass — if the converted page has validation issues (broken block nesting, a misconverted block, a dangling reference), do not rewrite the whole page. Locate the specific element with `respira_find_element` and correct it with `respira_update_element`. For repeated fixes across many blocks or several pages, batch them with `respira_batch_update`
|
|
222
|
+
8. Report: widgets converted, items flagged, known layout differences
|
|
223
|
+
|
|
224
|
+
### Phase 4: Post-Migration Verification
|
|
225
|
+
|
|
226
|
+
1. Summarize all migrations:
|
|
227
|
+
- Pages migrated
|
|
228
|
+
- Widgets converted to blocks
|
|
229
|
+
- Items needing manual attention
|
|
230
|
+
- Layout simplifications made
|
|
231
|
+
2. For each migrated page, provide:
|
|
232
|
+
- Link to edit the duplicate in Gutenberg
|
|
233
|
+
- Flagged items requiring manual recreation
|
|
234
|
+
- Layout notes (where the Gutenberg version differs from Elementor)
|
|
235
|
+
3. Post-migration checklist:
|
|
236
|
+
- [ ] Open each duplicate in block editor — verify blocks are valid
|
|
237
|
+
- [ ] Check responsive preview (tablet/mobile in block editor)
|
|
238
|
+
- [ ] Verify images, links, and media
|
|
239
|
+
- [ ] Recreate flagged widgets manually (forms, sliders, etc.)
|
|
240
|
+
- [ ] Add any needed block patterns or reusable blocks
|
|
241
|
+
- [ ] Consider a forms plugin replacement for Elementor forms
|
|
242
|
+
- [ ] Test interactive elements
|
|
243
|
+
- [ ] Review page speed improvement (should be noticeable)
|
|
244
|
+
|
|
245
|
+
## Safety Model
|
|
246
|
+
|
|
247
|
+
- Read-only analysis first — full content scan before any changes
|
|
248
|
+
- Explicit user confirmation required before creating any duplicates
|
|
249
|
+
- Original Elementor pages are never modified or deleted
|
|
250
|
+
- All migrated content goes to draft duplicates only
|
|
251
|
+
- Never auto-publishes migrated pages
|
|
252
|
+
- Takes a `respira_get_snapshot` of each duplicate before any write, so its pre-write state can be restored
|
|
253
|
+
- Two explicit rollback paths: restore the snapshot with `respira_restore_snapshot`, or delete the draft duplicates entirely with `respira_delete_page` / `respira_delete_post`
|
|
254
|
+
- Surgical fixes (`respira_find_element` + `respira_update_element`, or `respira_batch_update`) replace whole-page rewrites, so corrections stay scoped and reversible
|
|
255
|
+
- Warns about significant layout changes before proceeding
|
|
256
|
+
|
|
257
|
+
## Honest Disclaimer
|
|
258
|
+
|
|
259
|
+
This skill converts Elementor page content to Gutenberg blocks and creates draft duplicates for review.
|
|
260
|
+
|
|
261
|
+
It cannot:
|
|
262
|
+
- Replicate Elementor's design precision in Gutenberg
|
|
263
|
+
- Auto-convert Pro widgets, addon widgets, or forms
|
|
264
|
+
- Migrate dynamic content or theme builder templates
|
|
265
|
+
- Replace the need for visual review and manual fine-tuning
|
|
266
|
+
- Make Gutenberg do things it was not designed for
|
|
267
|
+
|
|
268
|
+
It can:
|
|
269
|
+
- Convert 60-80% of standard Elementor content to clean blocks
|
|
270
|
+
- Eliminate your Elementor dependency for simpler pages
|
|
271
|
+
- Dramatically improve page load speed (no Elementor CSS/JS overhead)
|
|
272
|
+
- Produce clean, standards-compliant WordPress content
|
|
273
|
+
- Give you a clear roadmap for what needs manual attention
|
|
274
|
+
- Keep your original pages completely untouched
|
|
275
|
+
|
|
276
|
+
## Tooling
|
|
277
|
+
|
|
278
|
+
**Core WordPress tools**
|
|
279
|
+
- `respira_get_site_context`
|
|
280
|
+
- `respira_list_plugins`
|
|
281
|
+
- `respira_list_pages`
|
|
282
|
+
- `respira_list_posts`
|
|
283
|
+
- `respira_read_page`
|
|
284
|
+
- `respira_read_post`
|
|
285
|
+
- `respira_get_builder_info`
|
|
286
|
+
- `respira_extract_builder_content`
|
|
287
|
+
- `respira_find_builder_targets`
|
|
288
|
+
- `respira_create_page_duplicate`
|
|
289
|
+
- `respira_create_post_duplicate`
|
|
290
|
+
- `respira_update_page`
|
|
291
|
+
- `respira_update_post`
|
|
292
|
+
|
|
293
|
+
**Safety and precision tools**
|
|
294
|
+
- `respira_get_snapshot`
|
|
295
|
+
- `respira_restore_snapshot`
|
|
296
|
+
- `respira_find_element`
|
|
297
|
+
- `respira_update_element`
|
|
298
|
+
- `respira_batch_update`
|
|
299
|
+
- `respira_delete_page`
|
|
300
|
+
- `respira_delete_post`
|
|
301
|
+
|
|
302
|
+
## Telemetry
|
|
303
|
+
|
|
304
|
+
After run completion, send fire-and-forget usage tracking to:
|
|
305
|
+
|
|
306
|
+
- `POST https://www.respira.press/api/skills/track-usage`
|
|
307
|
+
|
|
308
|
+
Include:
|
|
309
|
+
- `skill_slug = migrate-elementor-to-gutenberg`
|
|
310
|
+
- site/version context
|
|
311
|
+
- duration and success
|
|
312
|
+
- pages migrated, blocks created, widgets flagged counts
|
|
313
|
+
- tools used
|
|
314
|
+
|
|
315
|
+
Never block user flow on telemetry failure.
|
|
316
|
+
|
|
317
|
+
## Related Skills
|
|
318
|
+
|
|
319
|
+
- WordPress Site DNA (understand site structure before migrating)
|
|
320
|
+
- Internal Link Builder (verify internal links post-migration)
|
|
321
|
+
- SEO & AEO Amplifier (verify SEO preservation post-migration)
|
|
322
|
+
- Technical Debt Audit (clean up Elementor remnants after full migration)
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
Built by Respira Team
|
|
327
|
+
https://respira.press/skills/migrate-elementor-to-gutenberg
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
# Migrate Elementor to Oxygen
|
|
2
|
+
|
|
3
|
+
**Version:** 2.0.0
|
|
4
|
+
**Updated:** 2026-06-30
|
|
5
|
+
**Freshly updated:** v2.0.0 wires in current Respira safety and precision. Pre-migration now inventories source pages with `respira_find_builder_targets`. Every write is preceded by a `respira_get_snapshot`, and the existing draft-duplicate path is kept. After the initial `respira_inject_builder_content`, validation issues (column widths, broken refs) are corrected surgically with `respira_find_element` + `respira_update_element` (and `respira_batch_update` for multi-element or multi-page fixes) instead of re-injecting whole pages. Snapshot restore and draft deletion are now explicit rollback paths. Reflects the current 16 supported builders.
|
|
6
|
+
|
|
7
|
+
Converts Elementor-built WordPress pages to Oxygen Builder. Reads Elementor's JSON widget tree from post meta, maps each widget to its Oxygen component equivalent, generates a migration plan for approval, and writes Oxygen content to the target pages. Use this skill whenever someone wants to move from Elementor to Oxygen, switch to Oxygen's developer-oriented builder, or rebuild Elementor pages in Oxygen.
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Oxygen is a fundamentally different kind of builder than Elementor — it outputs clean HTML/CSS without wrapper divs, gives direct access to CSS properties, and thinks in terms of components rather than widgets. This migration requires not just content transfer but a philosophical shift: Elementor's widget-based approach maps to Oxygen's component-based architecture where you have more control but less hand-holding. Both Elementor and Oxygen are among the 16 page builders Respira reads and writes natively, so extraction and injection run through the same builder-aware tooling Respira uses everywhere else.
|
|
12
|
+
|
|
13
|
+
**Handles:**
|
|
14
|
+
- Section/Column layouts → Oxygen Section/Columns/Div components
|
|
15
|
+
- Text Editor, Heading → Oxygen Text and Heading components
|
|
16
|
+
- Image, Video, Button → native Oxygen equivalents
|
|
17
|
+
- Icon, Icon Box → Oxygen icon components
|
|
18
|
+
- Tabs, Accordion → Oxygen interactive components
|
|
19
|
+
- Spacer, Divider → CSS spacing or Oxygen separator
|
|
20
|
+
- Google Maps → Oxygen map component
|
|
21
|
+
- Code Block, Custom HTML → Oxygen Code Block
|
|
22
|
+
- Image Gallery → Oxygen Gallery component
|
|
23
|
+
- Custom CSS → Oxygen's stylesheet or custom CSS fields
|
|
24
|
+
- Responsive settings → Oxygen media query breakpoints
|
|
25
|
+
|
|
26
|
+
**Preserves:**
|
|
27
|
+
- All text content, headings, and inline formatting
|
|
28
|
+
- Image URLs, alt text, captions, and links
|
|
29
|
+
- Typography settings (mapped to Oxygen's CSS-based typography controls)
|
|
30
|
+
- Color values (hex, rgb, rgba)
|
|
31
|
+
- Spacing values (margin, padding)
|
|
32
|
+
- Background images and gradients
|
|
33
|
+
- Border and shadow CSS properties
|
|
34
|
+
- Link URLs and targets
|
|
35
|
+
- CSS classes
|
|
36
|
+
|
|
37
|
+
## What This Skill Does NOT Do
|
|
38
|
+
|
|
39
|
+
- **Third-party Elementor addons** — Essential Addons, JetElements, Crocoblock widgets are flagged for manual migration. Oxygen has its own ecosystem of components.
|
|
40
|
+
- **Elementor Pro dynamic tags** — Oxygen has powerful dynamic data capabilities but with a completely different interface. Dynamic content is flagged for manual setup.
|
|
41
|
+
- **Theme Builder templates** — Elementor's template system is separate from Oxygen's template system. Templates need to be recreated in Oxygen.
|
|
42
|
+
- **Form widgets** — Elementor forms need Oxygen's form component or a third-party solution.
|
|
43
|
+
- **Popup content** — Must be rebuilt using Oxygen's modal/lightbox functionality.
|
|
44
|
+
- **WooCommerce widgets** — Oxygen has its own WooCommerce components that must be configured independently.
|
|
45
|
+
- **Motion effects and animations** — Oxygen uses CSS animations directly; Elementor's motion effects don't map 1:1.
|
|
46
|
+
- **Responsive precision** — Oxygen uses explicit media query breakpoints (1120px, 992px, 768px, 480px by default) which differ from Elementor's breakpoints.
|
|
47
|
+
|
|
48
|
+
## Requirements
|
|
49
|
+
|
|
50
|
+
- Respira for WordPress plugin installed and connected
|
|
51
|
+
- MCP connection active (desktop or WebMCP)
|
|
52
|
+
- Elementor plugin active (to read source content)
|
|
53
|
+
- Oxygen Builder installed and active (to write target content)
|
|
54
|
+
- Read access to scan Elementor content
|
|
55
|
+
- Write access to create duplicates with Oxygen content
|
|
56
|
+
|
|
57
|
+
## Trigger Phrase
|
|
58
|
+
|
|
59
|
+
- "migrate elementor to oxygen"
|
|
60
|
+
|
|
61
|
+
## Alternative Triggers
|
|
62
|
+
|
|
63
|
+
- "convert elementor to oxygen"
|
|
64
|
+
- "switch from elementor to oxygen"
|
|
65
|
+
- "rebuild elementor in oxygen"
|
|
66
|
+
- "move from elementor to oxygen"
|
|
67
|
+
- "elementor to oxygen migration"
|
|
68
|
+
|
|
69
|
+
## Source Builder: Elementor
|
|
70
|
+
|
|
71
|
+
Elementor stores page content in the `_elementor_data` post meta field as a JSON string. The structure is a nested tree:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
Document
|
|
75
|
+
└─ Section (type: "section")
|
|
76
|
+
├─ settings: { structure, layout, content_width, ... }
|
|
77
|
+
└─ elements: [
|
|
78
|
+
Column (type: "column")
|
|
79
|
+
├─ settings: { _column_size, ... }
|
|
80
|
+
└─ elements: [
|
|
81
|
+
Widget (type: "widget", widgetType: "heading")
|
|
82
|
+
└─ settings: { title, size, header_size, ... }
|
|
83
|
+
]
|
|
84
|
+
]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Key Elementor specifics:
|
|
88
|
+
- **Widget types** are in the `widgetType` field
|
|
89
|
+
- **Responsive settings** use suffixes: `_tablet`, `_mobile`
|
|
90
|
+
- **CSS** cached in `_elementor_css` post meta
|
|
91
|
+
- **Page settings** in `_elementor_page_settings`
|
|
92
|
+
- **Global widgets** reference templates via `templateID`
|
|
93
|
+
|
|
94
|
+
Read Elementor content via `respira_extract_builder_content` with `builder=elementor`.
|
|
95
|
+
|
|
96
|
+
## Target Builder: Oxygen
|
|
97
|
+
|
|
98
|
+
Oxygen stores content in the `ct_builder_shortcodes` post meta field. Despite the name, modern Oxygen uses a JSON-based structure internally.
|
|
99
|
+
|
|
100
|
+
Key Oxygen specifics:
|
|
101
|
+
- Components include: `ct_section`, `ct_row`, `ct_column`, `ct_div_block`, `ct_headline`, `ct_text_block`, `ct_image`, `ct_link_button`
|
|
102
|
+
- Oxygen outputs clean HTML — minimal wrapper divs, direct CSS properties
|
|
103
|
+
- CSS is stored per-component with explicit property names (not shorthand)
|
|
104
|
+
- Responsive design uses media query breakpoints: default, 1120px, 992px, 768px, 480px
|
|
105
|
+
- Oxygen's ID system uses numeric component IDs
|
|
106
|
+
- Reusable parts are stored as `ct_template` post type
|
|
107
|
+
- Oxygen disables the theme — it controls all output directly
|
|
108
|
+
|
|
109
|
+
Write Oxygen content via `respira_inject_builder_content` with `builder=oxygen`.
|
|
110
|
+
|
|
111
|
+
## Execution Workflow
|
|
112
|
+
|
|
113
|
+
### Phase 1: Pre-Migration Audit
|
|
114
|
+
|
|
115
|
+
1. Verify Respira + MCP connection via `respira_get_site_context`. If unavailable, stop and show setup guidance.
|
|
116
|
+
2. Confirm Elementor is active via `respira_list_plugins`.
|
|
117
|
+
3. Confirm Oxygen is installed and active via `respira_list_plugins`.
|
|
118
|
+
4. **Important**: Note that Oxygen disables the WordPress theme. Verify the user understands this architectural difference.
|
|
119
|
+
5. Inventory and scope the source pages with `respira_find_builder_targets` (builder=elementor) — a fast, ranked list of every Elementor-built page/post before you touch anything. Fall back to `respira_list_pages` / `respira_list_posts` + `respira_get_builder_info` to confirm builder per item where needed.
|
|
120
|
+
6. For each Elementor page, extract content via `respira_extract_builder_content` with `builder=elementor`
|
|
121
|
+
7. Build an inventory:
|
|
122
|
+
- Total pages/posts using Elementor
|
|
123
|
+
- Widget types used (frequency count)
|
|
124
|
+
- Third-party addon widgets detected
|
|
125
|
+
- Dynamic tags and global widgets
|
|
126
|
+
- Layout complexity per page
|
|
127
|
+
- Estimated migration difficulty (simple/moderate/complex)
|
|
128
|
+
|
|
129
|
+
### Phase 2: Migration Plan
|
|
130
|
+
|
|
131
|
+
Present a migration plan that acknowledges the architectural differences:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
## Elementor → Oxygen Migration Plan
|
|
135
|
+
|
|
136
|
+
### Architectural Note
|
|
137
|
+
Oxygen takes full control of your site's output — it disables your WordPress
|
|
138
|
+
theme entirely. This is a significant architectural change from Elementor,
|
|
139
|
+
which works alongside your theme. Plan accordingly for headers, footers,
|
|
140
|
+
and archive templates.
|
|
141
|
+
|
|
142
|
+
### Site Inventory
|
|
143
|
+
- Total Elementor pages: X
|
|
144
|
+
- Total widgets to convert: X
|
|
145
|
+
- Auto-convertible: X (Y%)
|
|
146
|
+
- Manual attention: X (Y%)
|
|
147
|
+
|
|
148
|
+
### Component Mapping Summary
|
|
149
|
+
| Elementor Widget | Oxygen Component | Status |
|
|
150
|
+
|------------------|-----------------|--------|
|
|
151
|
+
| heading | ct_headline | Auto |
|
|
152
|
+
| text-editor | ct_text_block | Auto |
|
|
153
|
+
| image | ct_image | Auto |
|
|
154
|
+
| button | ct_link_button | Auto |
|
|
155
|
+
| section/columns | ct_section/row | Auto |
|
|
156
|
+
| [addon widget] | — | Manual |
|
|
157
|
+
|
|
158
|
+
### Page-by-Page Plan
|
|
159
|
+
1. **[Page Title]** — X widgets, [complexity]
|
|
160
|
+
- Auto-convertible: X
|
|
161
|
+
- Needs attention: [details]
|
|
162
|
+
2. ...
|
|
163
|
+
|
|
164
|
+
### Post-Migration Requirements
|
|
165
|
+
- Oxygen templates needed for: header, footer, archive, single post
|
|
166
|
+
- [Any theme-dependent features that need Oxygen equivalents]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Ask for confirmation:
|
|
170
|
+
> Oxygen is a powerful but different paradigm from Elementor. Your originals stay safe.
|
|
171
|
+
> 1. Migrate all pages
|
|
172
|
+
> 2. Migrate specific pages
|
|
173
|
+
> 3. Start with a test page (recommended)
|
|
174
|
+
> 4. Just keep this plan
|
|
175
|
+
|
|
176
|
+
### Phase 3: Page-by-Page Migration
|
|
177
|
+
|
|
178
|
+
For each approved page:
|
|
179
|
+
|
|
180
|
+
1. Read full Elementor content via `respira_extract_builder_content` with `builder=elementor`
|
|
181
|
+
2. Walk the Elementor JSON tree and map:
|
|
182
|
+
- Section → `ct_section`
|
|
183
|
+
- Column → `ct_column` within `ct_row`
|
|
184
|
+
- heading → `ct_headline` (map `header_size` to tag, `title` to text)
|
|
185
|
+
- text-editor → `ct_text_block` (preserve HTML content)
|
|
186
|
+
- image → `ct_image` (map src, alt, dimensions)
|
|
187
|
+
- button → `ct_link_button` (map label, URL, target)
|
|
188
|
+
- Map CSS properties directly (Oxygen uses explicit CSS, not abstracted settings)
|
|
189
|
+
- Convert Elementor responsive suffixes to Oxygen media query breakpoint keys
|
|
190
|
+
- Resolve global widgets to inline content
|
|
191
|
+
- Flag unmappable widgets
|
|
192
|
+
3. Generate valid Oxygen component structure
|
|
193
|
+
4. Create a duplicate via `respira_create_page_duplicate` or `respira_create_post_duplicate`
|
|
194
|
+
5. Before writing, take a snapshot with `respira_get_snapshot` so the duplicate's pre-write state can be restored if anything goes wrong
|
|
195
|
+
6. Write Oxygen content to the duplicate via `respira_inject_builder_content` with `builder=oxygen`
|
|
196
|
+
7. Surgical fix pass — if the injected page has validation issues (collapsed column widths, broken parent refs, a misconverted component), do not re-inject the whole page. Locate the specific element with `respira_find_element` and correct it with `respira_update_element`. For repeated fixes across many components or several pages, batch them with `respira_batch_update`
|
|
197
|
+
8. Report status
|
|
198
|
+
|
|
199
|
+
### Phase 4: Post-Migration Verification
|
|
200
|
+
|
|
201
|
+
1. Summarize all migrations:
|
|
202
|
+
- Pages migrated, components created, items flagged
|
|
203
|
+
2. For each migrated page:
|
|
204
|
+
- Link to edit in Oxygen
|
|
205
|
+
- Flagged items list
|
|
206
|
+
- CSS property notes (where Oxygen's approach differs)
|
|
207
|
+
3. Post-migration checklist:
|
|
208
|
+
- [ ] Open each duplicate in Oxygen editor
|
|
209
|
+
- [ ] Verify layout structure and component hierarchy
|
|
210
|
+
- [ ] Check responsive at each Oxygen breakpoint (1120px, 992px, 768px, 480px)
|
|
211
|
+
- [ ] Verify images and media
|
|
212
|
+
- [ ] Test links and buttons
|
|
213
|
+
- [ ] Recreate flagged elements manually
|
|
214
|
+
- [ ] Set up Oxygen templates for header/footer if not yet done
|
|
215
|
+
- [ ] Review Oxygen's clean HTML output
|
|
216
|
+
- [ ] Compare with Elementor original side-by-side
|
|
217
|
+
|
|
218
|
+
## Safety Model
|
|
219
|
+
|
|
220
|
+
- Read-only analysis first — full content scan before any changes
|
|
221
|
+
- Explicit user confirmation required before creating duplicates
|
|
222
|
+
- Original Elementor pages are never modified or deleted
|
|
223
|
+
- All migrated content goes to draft duplicates only
|
|
224
|
+
- Never auto-publishes migrated pages
|
|
225
|
+
- Takes a `respira_get_snapshot` of each duplicate before any write, so its pre-write state can be restored
|
|
226
|
+
- Two explicit rollback paths: restore the snapshot with `respira_restore_snapshot`, or delete the draft duplicates entirely with `respira_delete_page` / `respira_delete_post`
|
|
227
|
+
- Surgical fixes (`respira_find_element` + `respira_update_element`, or `respira_batch_update`) replace whole-page re-injection, so corrections stay scoped and reversible
|
|
228
|
+
- Warns about Oxygen's theme-disabling behavior upfront
|
|
229
|
+
|
|
230
|
+
## Honest Disclaimer
|
|
231
|
+
|
|
232
|
+
This skill converts Elementor page content to Oxygen format and creates draft duplicates for review.
|
|
233
|
+
|
|
234
|
+
It cannot:
|
|
235
|
+
- Migrate third-party Elementor addon widgets
|
|
236
|
+
- Auto-convert dynamic tags to Oxygen dynamic data
|
|
237
|
+
- Guarantee pixel-perfect visual match
|
|
238
|
+
- Migrate theme builder templates or popups
|
|
239
|
+
- Set up Oxygen's global templates (header, footer, etc.)
|
|
240
|
+
- Replace visual QA review
|
|
241
|
+
|
|
242
|
+
It can:
|
|
243
|
+
- Convert 80-90% of standard Elementor widgets to Oxygen components
|
|
244
|
+
- Produce cleaner HTML output than Elementor
|
|
245
|
+
- Preserve all text content, images, links, and core styling
|
|
246
|
+
- Save significant rebuilding time
|
|
247
|
+
- Flag everything needing manual attention
|
|
248
|
+
- Keep original pages untouched
|
|
249
|
+
|
|
250
|
+
## Tooling
|
|
251
|
+
|
|
252
|
+
**Core WordPress tools**
|
|
253
|
+
- `respira_get_site_context`
|
|
254
|
+
- `respira_list_plugins`
|
|
255
|
+
- `respira_list_pages`
|
|
256
|
+
- `respira_list_posts`
|
|
257
|
+
- `respira_read_page`
|
|
258
|
+
- `respira_read_post`
|
|
259
|
+
- `respira_get_builder_info`
|
|
260
|
+
- `respira_extract_builder_content`
|
|
261
|
+
- `respira_inject_builder_content`
|
|
262
|
+
- `respira_find_builder_targets`
|
|
263
|
+
- `respira_create_page_duplicate`
|
|
264
|
+
- `respira_create_post_duplicate`
|
|
265
|
+
|
|
266
|
+
**Safety and precision tools**
|
|
267
|
+
- `respira_get_snapshot`
|
|
268
|
+
- `respira_restore_snapshot`
|
|
269
|
+
- `respira_find_element`
|
|
270
|
+
- `respira_update_element`
|
|
271
|
+
- `respira_batch_update`
|
|
272
|
+
- `respira_delete_page`
|
|
273
|
+
- `respira_delete_post`
|
|
274
|
+
|
|
275
|
+
## Telemetry
|
|
276
|
+
|
|
277
|
+
After run completion, send fire-and-forget usage tracking to:
|
|
278
|
+
|
|
279
|
+
- `POST https://www.respira.press/api/skills/track-usage`
|
|
280
|
+
|
|
281
|
+
Include:
|
|
282
|
+
- `skill_slug = migrate-elementor-to-oxygen`
|
|
283
|
+
- site/version context
|
|
284
|
+
- duration and success
|
|
285
|
+
- pages migrated, components created, items flagged counts
|
|
286
|
+
- tools used
|
|
287
|
+
|
|
288
|
+
Never block user flow on telemetry failure.
|
|
289
|
+
|
|
290
|
+
## Related Skills
|
|
291
|
+
|
|
292
|
+
- WordPress Site DNA (understand site structure before migrating)
|
|
293
|
+
- Internal Link Builder (verify internal links post-migration)
|
|
294
|
+
- SEO & AEO Amplifier (verify SEO preservation post-migration)
|
|
295
|
+
- Technical Debt Audit (clean up post-migration)
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
Built by Respira Team
|
|
300
|
+
https://respira.press/skills/migrate-elementor-to-oxygen
|