Skip to content

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.

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.

On by default. Five operations.

OperationWhat it returns
get-contextBeTheme version, whether BeBuilder is usable, which settings groups exist, and how many pages already use BeBuilder. Start here.
get-settingsCurated settings with value plus type, label and group. Optional group or keys; omit both for everything.
list-item-typesEvery BeBuilder item type the installed theme registers. Optional search.
get-item-schemaThe settings an item type accepts, read from the theme’s own renderer. Takes type or types: [...].
get-pageA page’s BeBuilder structure as sections, wraps and items, each with its uid, type and settings. Takes post_id.

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.

OperationWhat it does
update-settingsWrites curated settings from values: { key: value }. A key outside the curated list is reported in skipped[] rather than written.
set-pageReplaces a page’s whole BeBuilder content. Structure is validated before anything is written.
add-sectionAppends one section, leaving existing sections alone. Takes an optional position.

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:

GroupCovers
colorsBody, header, footer, subheader, action bar and form backgrounds; the highlight colour; content, heading and menu text
typographyBody, heading and menu font families and sizes
layoutSite layout, content width, and the responsive breakpoints
header-footerHeader style and height, sticky behaviour, footer layout and widget areas
blogBlog 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.

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.

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.

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.

  • “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.”
  • BeTheme active as the site’s theme
  • EMCP Tools Pro
  • betheme-write enabled under Tools → Themes, for anything that writes