Feature 067 — Elementor Ability Suite (interim ship)
Interim release of the planned 88-ability Elementor integration. This release delivers the full foundational infrastructure plus the two highest-value abilities. Follow-up features (068+) will incrementally add the remaining 86 abilities against the frozen spec + contracts under `specs/067-elementor-abilities/`.
Foundation
Category registrar — new `acrossai-abilities-manager-elementor` category, self-guarded on `class_exists('\\Elementor\\Plugin')` so it's silently absent on non-Elementor sites.
Six shared utility classes under `includes/Abilities/Utilities/Elementor/`:
| Utility | Purpose |
|---|---|
| `Document_Repository` | Elementor document I/O with mandatory `wp_slash()` policy on `_elementor_data` writes, cache invalidation (Elementor files manager + WP post cache + `_elementor_css` meta delete), full tree helpers (find/insert/remove/reorder/replace by element ID, deep-clone with fresh IDs, descendant-guard) |
| `Widget_Controls` | Schema-safe summariser over Elementor's `WidgetsManager::get_widget_types()` with case-insensitive control-name filtering |
| `Template_Query` | `WP_Query` wrappers for the `elementor_library` CPT + keyword-scoring for future pattern-search abilities |
| `Guidance_Catalog` | Canonical Elementor.com widget catalog (60+ Basic/Pro/Theme/WooCommerce widgets seeded, 12-hour transient) + pattern & layout guidance data |
| `Design_Audit_Runner` | Orchestrator for the 28 future design-audit abilities (register + run individual + aggregate with score + findings + recommendations) |
Bootstrap gating — two-layer defense: outer `class_exists` at `plugins_loaded` P20 + per-ability defense-in-depth check at execution time. Runtime deactivation returns a clean `{ success: false, error_code: 'elementor_missing' }` envelope; no fatal errors. Inner Pro gate ready for future Custom Code + Form Submissions abilities.
Two shipped abilities
| Slug | Purpose |
|---|---|
| `acrossai/elementor-get-widget-controls` | The schema-lookup primitive. Returns the schema-safe control summary for any registered Elementor widget on the current site (free + Pro + third-party). Enables clients to author valid `add-widget` / `update-element` payloads without hard-coded per-widget wrappers. Optional case-insensitive `search` filter across name/label/description/section/type. |
| `acrossai/elementor-get-data` | The read primitive. Returns the parsed Elementor document tree + page settings + recursive element count for a post. |
Deferred to follow-ups
86 abilities across Phases 3-13 are documented with complete input/output contracts under `specs/067-elementor-abilities/contracts/abilities.md`. Bootstrap already has instantiation slots wired. Follow-up features will land:
- Element operations (add-container, add-widget, update-element, merge-element-settings, delete-element, move-element, duplicate-element, reorder-elements, etc.)
- Widget shortcuts (add-heading, add-text-editor, add-image, add-button, add-post-tabs)
- Templates (11 abilities — full CRUD + import/export + pattern search)
- Kits & site settings (7 abilities)
- Theme Builder conditions (2 abilities)
- System / maintenance (4 abilities)
- Design audits (28 abilities)
- Elementor Pro Custom Code + Form Submissions (8 abilities)
Quality
- 636 PHPUnit tests, 1530 assertions, 0 failures (577 baseline + 59 new)
- PHPCS (WPCS strict): 0 errors
- PHPStan (level 8): 0 errors
- All 8 CI checks pass on PR #116