Page BuildersDivi (Divi 4 + Divi 5)

Divi (Divi 4 + Divi 5)

Technical documentation for using Respira with Divi 4 shortcodes and Divi 5 block-based layouts, including module-level updates.

Divi (Divi 4 + Divi 5)

Technical documentation for using Respira with Divi.

Divi 5 and migration support

Respira supports both Divi 4 and Divi 5 content structures so you can maintain existing layouts and prepare for migration.

  • Divi 5 layouts are supported via their block-based divi/* structure
  • Divi 4 layouts are supported via their shortcode-based et_pb_* structure
  • Divi’s Migrator handles the actual conversion between Divi 4 and Divi 5 formats

Respira helps you plan and validate your Divi 5 migration. Divi’s Migrator performs the actual conversion.

Use these resources for Divi 5 specific workflows:

What you will learn

  • How Divi 4 shortcode-based layouts map to Respira’s module model
  • How Divi 5 block-based layouts differ from Divi 4 and what stays the same
  • How to identify, query, and update Divi modules safely with Respira

About Divi

Divi by Elegant Themes is one of the most popular WordPress page builders with over 2 million active installations. It features a visual drag-and-drop editor with 200+ content modules.

Data structure

Divi 4 stores its builder layouts as et_pb_* shortcodes in post_content. Divi 5 uses block-based layouts where Divi modules appear as divi/* blocks in post_content. Respira works against both formats but does not perform the migration or conversion between them.

On Divi 4, Respira parses the shortcode tree with a quote-aware attribute parser and folds alias children (rows and columns) into the right nesting, so a rebuild keeps the section, row, and column structure intact.

Divi stores content as shortcodes in post_content:

[et_pb_section fb_built="1" _builder_version="4.16"]
  [et_pb_row]
    [et_pb_column type="4_4"]
      [et_pb_text admin_label="Hero Text"]
        <h1>Welcome</h1>
      [/et_pb_text]
      [et_pb_button admin_label="CTA" button_text="Get Started" button_url="/contact"]
      [/et_pb_button]
    [/et_pb_column]
  [/et_pb_row]
[/et_pb_section]

Module identification

Set in Divi: Module Settings → Advanced → Admin Label

{ "admin_label": "Hero CTA Button" }

By path

{ "path": "sections[0].rows[0].columns[0].modules[1]" }

By type

{ "type": "et_pb_button", "match_content": "Get Started" }

Common Divi modules

ModuleShortcodeKey Attributes
Textet_pb_textcontent (HTML)
Buttonet_pb_buttonbutton_text, button_url
Imageet_pb_imagesrc, alt, url
Blurbet_pb_blurbtitle, content, image
Codeet_pb_codecontent (raw HTML/JS)
Accordionet_pb_accordionnested et_pb_accordion_item
Tabset_pb_tabsnested et_pb_tab
Slideret_pb_slidernested et_pb_slide
CTAet_pb_ctatitle, button_text, button_url
Contact Formet_pb_contact_formemail, title

Example prompts for Divi

Content updates:

  • "Change the hero headline to 'Welcome Home'"
  • "Update all button colors to #FF5733"
  • "Replace the about section image"

Structure queries:

  • "Show me all sections on this page"
  • "List all buttons and their text"
  • "What modules are in the first row?"

Bulk updates:

  • "Find all buttons with 'Learn More' and change to 'Get Started'"
  • "Update the copyright year in the footer to 2025"

Global modules

Respira detects Divi Global Modules. Updates to global modules appear everywhere they are used.

  • "List all global modules" → Shows global module library
  • "Update the global footer email address" → Changes it site-wide

Theme Builder: the live-edit confirmation handshake

Divi Theme Builder global layouts (global headers, global footers, global bodies) are written live, not staged.

They cannot be staged the way a page can. Divi resolves a global layout by id, so a staged duplicate would compete with the original instead of sitting quietly next to it. That is a property of how Divi works, and pretending otherwise would be worse than saying it plainly.

What 8.0 adds instead is a confirmation handshake:

  • The first attempt to rewrite a global header, footer or body is refused with respira_tb_live_edit_confirmation_required.
  • The refusal names the layout and states that the change affects every page using it.
  • To proceed, re-send the same call with confirm_live_edit=true.

This is a confirmation, not an approval. Approval means a human reviews a staged change before it exists on the live site. Confirmation means the agent is told what it is about to touch, and has to say yes on purpose. A Theme Builder global layout write goes live when confirmed.

Global layout writes are still snapshotted and reversible. If a confirmed write lands wrong, restore the snapshot from the Changes page in WordPress admin.

Limitations

  • Visual-only settings (hover states) may need Divi builder
  • Per-module custom CSS is supported but complex styling may need builder
  • Dynamic content tokens are preserved but not directly editable
  • Theme Builder global layouts are written live behind a confirmation handshake, not staged for approval

Recent capabilities (8.0 "Canopy")

Two fixes from auditing the safety layer itself, both on the Divi path:

  • A Divi 4 serializer rule stopped firing where it did not belong. The rule was written for brand-new pages, but it ran on every write path, which meant it retyped existing Code modules on pages it should only have passed through.
  • Undoing a Theme Builder create no longer trashes a template the agent never created. The undo path could reach past its own work.

Recent capabilities (plugin v7.5.x)

Divi 4 stays shortcode-based, and recent work hardened that path:

  • Alias children fold correctly. Row and column aliases now fold into the right nesting, so a full-page rebuild no longer drops rows or columns.
  • Quote-aware attribute parser. Shortcode attribute values that contain quotes or brackets (for example a button_text with punctuation) parse cleanly instead of truncating the shortcode.
  • kses and column_structure corruption fixes. Content-filtering and column-width edge cases that could corrupt a saved page are fixed, so an edited Divi 4 page renders as written.

See also