Skip to content
PortBay

Edit your WordPress theme's PHP, not a builder's database

Click an element on your running site and change its text, classes or attributes in your theme's own templates — the PHP files in your repo, not a builder's database rows. Pro, early access, opt-in.

The short answer

How do I visually edit a WordPress theme?

Visual editing in WordPress almost always means a page builder: a plugin that stores your layout as its own data in the database and renders it back, so the thing you edit is the builder's content rather than the PHP in your theme. Editing the theme itself is a different job and a harder one, because WordPress gives a rendered element no way to say which template file produced it. PortBay works that backwards — it searches your theme source for the exact element you clicked and refuses to write unless the match is unambiguous. Text, class and attribute edits land in your theme's PHP templates on a classic theme, or in its block template files on a block theme. Page titles and SEO fields are a different thing entirely — rows in the database rather than anything in your theme — and PortBay does not write those on WordPress.

Verified against the product, 2026-09-05.

In the app

A classic theme, served from your repo

acme-shop · Board6 cards3 agents online
Pending2
infra
Rate-limit the API
P1
Dark mode polish
P2
Todo2
auth
Add OAuth login
P0Claude Code0/3oauth-login
Auto-dispatching
implement OAuth on app.test
db
Migrate to Postgres
P1
In Progress1
Fix flaky checkout test
P0
Done2
Set up Mailpit inbox
P2
Seed demo data
P2
1/5 · AssignA card lands in Todo and @claude is mentioned

PortBay runs WordPress at its own .test URL with trusted HTTPS and a per-project MySQL database, and dispatches board cards into it. The visual editor edits that same running site in your real browser.

Walkthrough

Your first theme edit

Four steps, and no plugin to install on the WordPress side. Read the next section before you rely on it, because this stack has real limits.

  1. Install PortBay and add your WordPress site
  2. Turn the visual editor on
  3. Nothing to install on the WordPress side
  4. Open Edit in browser and change something

Install PortBay and add your WordPress site

Homebrew installs the app and the bundled portbay CLI. Add the site folder and PortBay detects WordPress, provisions MySQL, and serves it at its own .test hostname over trusted HTTPS. It also tells classic themes from block themes, because the two behave differently here.

brew tap portbay-app/portbay && brew install --cask portbay

Turn the visual editor on

It ships to Pro under early access and is off by default. Sign in to Pro, then flip the Early Access toggle. The open-source build does not include the editor at all — it is not compiled in.

Settings › Account › Early Access

Nothing to install on the WordPress side

There is no plugin and no mu-plugin to add, because there is nothing to stamp: unlike Laravel, Rails and Django, WordPress has no source-coordinate stamper and is not getting one. PortBay resolves an element by searching your theme's source instead. The tradeoff is honest — an element has to be findable and unique in your theme, and PortBay refuses rather than guessing when it is not.

wp-content/themes/your-theme/

Open Edit in browser and change something

The project's Visual editing section has one button. It opens your normal browser at your normal .test URL with the edit bar docked at the top, booting in Preview mode where the page stays fully interactive. Switch to Edit, double-click text to type into the live page, then Save to write to your theme files.

https://mysite.test
Without PortBay

Where WordPress says no

This stack has more edges than the others on this site, and they are worth knowing before you start rather than after. Everything below is what PortBay actually does, including the parts where it refuses.

One more thing PortBay tells you itself rather than letting you discover it: WordPress, and any caching plugin or CDN in front of it, may keep serving a cached copy after a save. Clear the cache if a change does not show up straight away.

Questions

Asked before downloading

How is PortBay's WordPress visual editor different from a page builder like Elementor or Divi?

A page builder stores your layout as its own data in the WordPress database and renders it back through its plugin. What you edit is the builder's content, and your theme's PHP is largely bypassed. PortBay does the opposite: it edits the template files in your theme, so the change is in your repository and shows up in git. If you already build with Elementor, PortBay is not the tool for those layouts — it refuses to write them, for a reason worth reading below.

Why does PortBay's visual editor refuse to edit Elementor layouts?

Because writing them directly would appear to work and then not work. Elementor's stored layout lives in a postmeta row, but its element cache, page-CSS cache and asset list are all keyed on the post's modified time, which a direct row write does not move. The layout would change and the rendered page would not. PortBay registers that lane purely so it can refuse by name instead of leaving you to debug a save that silently did nothing.

Can PortBay's visual editor edit WordPress page titles and SEO fields?

No — change those in the WordPress admin. They are rows in your site's database rather than anything in your theme, and PortBay's page-settings lane does not write them on WordPress, on a classic or a block theme. It is one of two stacks out of twenty-one where that lane is unavailable. What this page describes is a different thing: the text, classes and attributes in the template files you actually wrote.

Does PortBay's visual editor work with WordPress block themes as well as classic themes?

PortBay's visual editor works on both, but they behave differently enough to have separate pages — this one covers classic PHP themes. On a block theme the editable files are templates/*.html, parts/*.html and theme.json rather than PHP templates, and page content is a further step removed because it lives in the database. If you are on a Full Site Editing theme, read the WordPress block themes page instead.

Is this as precise as the Laravel or Rails support?

No, and it is worth being direct about that. Laravel, Rails and Django have stampers that give every element its exact file, line and column. WordPress has none, and is not getting one, so PortBay locates an element by searching your theme source and requires exactly one match before it writes. In practice that is reliable for distinctive markup and refuses on repeated markup — which is the safe failure, but it is a real difference from the stamped stacks.

Will PortBay's visual editor break my WordPress theme or leave anything behind?

PortBay's visual editor writes only the bytes that changed. A one-class edit shows up in git diff as one changed token, multi-line attributes keep their indentation, and nothing is inserted into your markup to make the editing work — there are no marker attributes to strip before you deploy. Because the changes are ordinary edits to files in your repo, git is your undo, and PortBay also keeps its own history of every change it made.

Is PortBay's visual editor free for WordPress?

No. It is a Pro feature, still in early access behind an opt-in toggle in Settings, and it is not compiled into the open-source build. It is also unavailable on a project while that project is publicly tunneled — the edit bar and its write-back endpoints are never routed onto public traffic. Running WordPress locally, the MySQL database, the .test hostname and trusted HTTPS are all in the free, open-source app.

PortBay mascot — a friendly blue tugboat

Give your projects and your agents a real local home.

Download for macOS

Free & open source · macOS 11+ on Apple Silicon · Pro from $10/mo