Posts & pages
The Posts and Pages sections of a WordPress site (/sites/:srv/:dom/posts
and /sites/:srv/:dom/pages) are a fast, searchable content list backed by a
full-screen editor. MZPanel talks to WordPress directly — no wp-admin login, no
child plugin, no page-builder dependency — so you can write, publish and tidy up
content without ever leaving the panel. Available on any WordPress site.
Write a post, step by step
Section titled “Write a post, step by step”- Open Posts (or Pages) from the site’s left rail and click New post (New page). The full-screen editor opens on its own route — the panel rail and top bar step aside so you get a distraction-free writing pane.
- Type a title, then write in the body canvas. The editor is a rich Tiptap surface that round-trips through WordPress blocks, so what you write saves as real Gutenberg block markup.
- Set the essentials in the General rail on the right: Status, Slug, and (for posts) Categories and Tags. Add an optional Excerpt.
- Click Save draft to keep working, or Publish to go live (the button reads Update once the item is already published). A Saved tick and a Last saved timestamp confirm each write.
- Use Back to return to the list, or the slide-in menu (bottom-left Expand menu) to jump straight to another post or page without leaving the editor.
What else you can do
Section titled “What else you can do”On the list (/posts or /pages):
- Filter by status — All / Published / Drafts / Pending / Scheduled — and search across titles. The list is paginated (20 per page) and reads live from the site.
- Row actions (on hover): Edit, SEO, View (opens the live URL), and Trash (a soft delete you can restore).
- Bulk actions: tick rows, then Publish, Draft or Trash them all at once from the floating bar.
In the editor:
- Categories & tags — pick from existing terms or create a new tag inline (posts only; pages have no taxonomy).
- SEO — the SEO button opens the same per-post SEO panel used across the site (title, meta description and more), keyed to the saved post.
- Preview / View — open the live or draft URL in a new tab.
- Move to trash — a two-click confirm at the bottom of the settings rail.
How it works
Section titled “How it works”Posts and pages split reads from writes so the list stays fast while edits stay correct:
- The list reads through a native, direct-DB path: the dashboard calls
GET /v1/servers/:id/wp/list(scopesite), and the agent reads post metadata straight from the site’s database over a pooled connection — no per-call PHP or wp-cli bootstrap, so even large sites page instantly. Categories and tags load the same way (…/wp/terms). - Every edit writes through the
wp.contentjob. The agent proxies WordPress’s own REST API (wp/v2/posts,wp/v2/pages,wp/v2/categories, …) via the bundled mzpanel-agent mu-plugin, elevated to admin context — so WordPress runs its normal sanitisation and hooks. Nothing is stored in MZPanel; WordPress remains the source of truth. - The editor body flows as WordPress block markup end-to-end:
content.rawloads into Tiptap, which serialises back to blocks on save, so complex blocks survive a round trip.
CLI & automation
Section titled “CLI & automation”Content is driven by the wp … content command on the box — the same engine the
editor uses. The path and method map 1:1 to the WordPress REST API. SSH in and run
them, or let an on-box AI (ClaudeCode) run the same commands:
mz wp example.com content GET wp/v2/posts?per_page=20 --json # list postsmz wp example.com content GET wp/v2/posts/42?context=edit --json # read onemz wp example.com content POST wp/v2/posts \ --data '{"title":"Hello","content":"<p>Hi</p>","status":"draft"}' --jsonmz wp example.com content PUT wp/v2/posts/42 --data '{"status":"publish"}' --jsonmz wp example.com content DELETE wp/v2/posts/42 --json # trashSwap posts for pages (or categories/tags) to hit the matching resource.
Always pass --json for machine output. See The mz CLI and the
command catalog.
Gotchas & troubleshooting
Section titled “Gotchas & troubleshooting”- Some editor fields are display-only for now. The Featured image, Author, Discussion, Format and Publish (schedule) rows, the in-rail SEO tab and the AI assist tab are mock-first surfaces that don’t persist yet. The fields that do save are title, body, status, slug, excerpt, categories and tags — plus the real SEO panel opened from the toolbar SEO button. Use Open/Preview in WordPress for anything block-heavy or not yet wired.
- Trash is a soft delete. The Trash action moves an item to the WordPress trash (recoverable in wp-admin), not a permanent delete.
- Needs the agent online. Both the list and the editor read and write live through the site’s agent; when it’s offline the editor shows an “agent offline” notice and won’t save.
- WordPress-only. These sections only appear for WordPress sites; static, PHP, Node, Python and Go site types have no content list.
- Add-on positioning. Fleet-wide content and AI generation are planned as a paid WP & AI add-on; billing isn’t wired yet, so per-site posts and pages are fully usable today.
Related
Section titled “Related”- Site overview — the per-site health cockpit and content counts.
- WP & AI content — managing content across your whole fleet.
- The mz CLI · Command catalog.