About this plugin
Bindery gives any WordPress theme a clean, locked, edit-in-place experience — without a page builder and without giving up hand-written markup.
Custom and AI-built themes are fast and clean, but content-hostile: a client can’t change a headline or a phone number without a developer. Page builders fix that but bloat your markup and your editing screen. Bindery is the missing middle — you decide what a client may change, and they edit only that, right on the live page.
json, the REST API), so Bindery never owns your markup and adds no builder lock-in.
What it does
- Edit on the live page. A floating “✎ Edit page” button turns the regions you declared into inline-editable text. Click, type, click away — saved.
- No-code setup. From the Bindery settings screen, tick which HTML tags (headings, paragraphs, lists, quotes…) become editable site-wide. That’s it.
- Or mark regions in code. A one-line template helper ( bindery_attrs() ) makes a single element editable; template tags render declared fields anywhere; eight ready-made blocks cover richer content.
- Locked by design. Only declared regions are editable. Layout, structure and anything unmarked stay untouchable — clients can’t break the design.
- Multilingual. Every field stores a value per language; unedited languages fall back to your code default.
- Revision history + one-click restore for every edit.
- Export / import all content as JSON for staging → production migrations (also via WP-CLI).
- Theme-portable. Verified across Astra, OceanWP, Neve, the default Twenty-* themes and block (FSE) themes; the bundled blocks adapt to your theme’s colours.
Five ways to make content editable
- Settings page — choose editable tags, zero code.
- Attribute helper — bindery_attrs() marks one element editable in your template.
- Blocks — drop a Bindery block into the block editor.
- Template tags — bindery_field() / bindery_value() render a declared field in PHP.
- Auto mode — make all existing page text editable automatically.
Built for developers, too
A small DI container with four filter-driven seams (field types, value sources, storage adapters, locale providers). Values live in their own table, never in your markup; writes are whitelisted to the fields actually on the page and sanitized per type; output is escaped per type. WP-CLI commands for export/import/history/restore.
md.