BeTheme
New in v3.14.0, Pro. BeTheme is one of the most-sold WordPress themes ever, and it ships its own page builder, BeBuilder. That combination means an agent connected to a BeTheme site could previously read the site but not build on it: the Elementor and Gutenberg tools do not touch BeBuilder’s data, and BeTheme’s 830 theme settings all live in one option.
Two dispatcher tools cover both halves. They register only when BeTheme is the active theme.
How it works
Section titled “How it works”Both tools take { operation, arguments }. Omit operation to get back the list of available operations for that tool.
Work in the order the operations are numbered below: read the context, discover what item types exist, read the schema for the ones you want, then write. Guessing an item’s field names produces a page that saves without error and renders as an empty section.
emcp-tools/betheme-read
Section titled “emcp-tools/betheme-read”On by default. Five operations.
| Operation | What it returns |
|---|---|
get-context | BeTheme version, whether BeBuilder is usable, which settings groups exist, and how many pages already use BeBuilder. Start here. |
get-settings | Curated settings with value plus type, label and group. Optional group or keys; omit both for everything. |
list-item-types | Every BeBuilder item type the installed theme registers. Optional search. |
get-item-schema | The settings an item type accepts, read from the theme’s own renderer. Takes type or types: [...]. |
get-page | A page’s BeBuilder structure as sections, wraps and items, each with its uid, type and settings. Takes post_id. |
emcp-tools/betheme-write
Section titled “emcp-tools/betheme-write”Disabled by default. Turn it on under Tools → Themes. It changes global theme settings and can replace a page’s entire builder content, so it ships off for the same reason the other theme write tools do.
| Operation | What it does |
|---|---|
update-settings | Writes curated settings from values: { key: value }. A key outside the curated list is reported in skipped[] rather than written. |
set-page | Replaces a page’s whole BeBuilder content. Structure is validated before anything is written. |
add-section | Appends one section, leaving existing sections alone. Takes an optional position. |
Theme Options
Section titled “Theme Options”BeTheme keeps all of its settings, around 830 keys, in a single autoloaded betheme option. Handing an agent all of them wastes context and invites damage, so EMCP exposes a curated 34-key allowlist across five groups:
| Group | Covers |
|---|---|
colors | Body, header, footer, subheader, action bar and form backgrounds; the highlight colour; content, heading and menu text |
typography | Body, heading and menu font families and sizes |
layout | Site layout, content width, and the responsive breakpoints |
header-footer | Header style and height, sticky behaviour, footer layout and widget areas |
blog | Blog and single-post layout options |
Anything outside that list is left alone. get-settings returns the type and label for each key, so an agent can tell a colour from a font size without guessing.
The BeBuilder data model
Section titled “The BeBuilder data model”A BeBuilder page is three levels deep, stored in the mfn-page-items post meta:
section└── wrap (a column; its `size` sets the column width) └── item (a widget; `type` picks which one)set-page takes exactly that shape:
betheme-write({ operation: "set-page", arguments: { post_id: 42, sections: [ { wraps: [ { size: "1/1", items: [ { type: "heading", size: "1/1", attr: { title: "Hello", tag: "h1" } } ] } ] } ] }})Two things that will cost you an afternoon
Section titled “Two things that will cost you an afternoon”Item settings live under attr, not fields. Read get-item-schema and pass exactly the keys it names, inside attr. A wrong key is stored without complaint and simply never reaches the renderer.
A wrap or an item without a size renders as nothing at all. No error, no warning, no visible element. If a section you just wrote comes back empty on the front end, check for a missing size before anything else. Columns come from wrap sizes: two 1/2 wraps side by side make a two-column row.
Where the item schema comes from
Section titled “Where the item schema comes from”BeBuilder items render through the theme’s own shortcode functions, and each one declares the fields it accepts. get-item-schema reads that declaration directly rather than shipping a hand-written list, so the schema matches whatever version of BeTheme is installed on the site, including items added by a theme update.
EMCP Themer and BeTheme together
Section titled “EMCP Themer and BeTheme together”BeTheme has its own template system, and EMCP Themer takes over the whole document when it has a body template that matches the page. Both are legitimate ways to build a site, so EMCP does not switch either off for you.
When a real overlap exists, an admin notice appears saying which one is winning and pointing at the setting to change if you wanted the other. If you plan to use BeTheme’s templates, turn the EMCP Themer module off under EMCP Tools → Modules; if you plan to use Themer, the notice tells you it is already in charge.
Prompts to try
Section titled “Prompts to try”- “What BeTheme settings can you change on this site?”
- “Set the highlight colour to #0F62FE and the body font to Inter.”
- “Show me the BeBuilder structure of the home page.”
- “Add a two-column section to page 42 with a heading on the left and an image on the right.”
Requirements
Section titled “Requirements”- BeTheme active as the site’s theme
- EMCP Tools Pro
betheme-writeenabled under Tools → Themes, for anything that writes