Content approval workflow
Require editorial review before content goes live — with email notifications, soft and hard rejection, and a dedicated review queue.
The content approval workflow adds a review gate between writing and publishing. When it's enabled, authors submit content for review instead of publishing directly. Reviewers approve or reject it, with optional notes, before it goes live.
It's built into Contensio core — no plugin required.
Enabling the workflow
Go to Settings → Content and turn on Content approval workflow. Once enabled, the behaviour changes for users who don't have the bypass permission (see Permissions below).
There's also a Auto-publish on approval toggle (on by default). If you turn it off, approved content stays in draft after approval — a reviewer must manually publish it. Leave it on for most sites.
How it works for authors
When the workflow is active, authors who can't bypass it lose the ability to publish directly. The Status field is locked to Draft and the Publish button is replaced by Submit for Review.
Clicking Submit for Review saves the current content and puts it in the pending queue. A notification email is sent to all users with the reviewer permission.
The author can see the review status of their content in the sidebar:
- Pending Review — waiting for a decision
- Approved — accepted (and published if auto-publish is on)
- Revision Requested — reviewer asked for changes; the author can edit and resubmit
- Rejected — permanently rejected; the Submit button is removed
After a rejection
Revision Requested (soft rejection) — the reviewer's notes appear in the sidebar. Fix the content and click Submit for Review again when ready.
Rejected (hard rejection) — this is permanent. The reviewer has decided the content won't be published. The Submit button disappears. The author can contact a reviewer if they believe this was a mistake.
How it works for reviewers
Users with the content.approve permission see a Reviews link in the sidebar and a badge showing how many items are pending.
The Reviews screen shows all pending content with its title, type, author, and submission date. For each item:
- Approve — one click; approves the content (and publishes it if auto-publish is on)
- Reject — opens a small panel where you choose between a soft or hard rejection and write a note
Writing rejection notes
A rejection note is required when you reject content — it tells the author what to fix (for soft rejections) or why the content was rejected (for hard rejections). Notes are shown in the email notification to the author and in their edit screen sidebar.
Keep notes specific and actionable: "The pricing section references our old plans — please update to the current plans page" is more useful than "Needs revision."
Email notifications
Two automatic emails are sent:
| Event | Who receives it |
|---|---|
| Author submits content | All users with the content.approve permission |
| Reviewer makes a decision | The content's author |
Emails are sent in the background and won't slow down the save action. If email sending fails (e.g., SMTP misconfiguration), the content is still saved and the review status is still updated.
Permissions
Two permissions control the workflow:
| Permission | What it does |
|---|---|
content.approve |
Grants access to the Reviews queue and the ability to approve/reject submissions |
content.bypass_review |
Lets this user publish content directly, skipping the review queue entirely |
Super Admin and Admin roles bypass the workflow automatically — they can always publish directly.
To make a trusted author able to publish without review, assign them the content.bypass_review permission in Configuration → Roles (or create a custom role with that permission).
See Roles & Permissions for the full permissions reference.
The audit log
Every action in the workflow is recorded in an append-only log. You can't edit or delete log entries. The log records:
- Who submitted the content and when
- Who approved or rejected it and when
- What the rejection notes said
This gives you a full audit trail of every editorial decision.
FAQ
Does the workflow affect Super Admins and Admins?
No. Admins and Super Admins always bypass the workflow — they can publish directly regardless of the workflow setting.
Can I have some authors bypass the review and others not?
Yes. Assign the content.bypass_review permission to roles or individual users that should be able to publish directly.
Can a reviewer also be an author?
Yes. If a user has both content.approve and the ability to create content, they can review others' submissions and also create their own (which they can publish directly if they have content.bypass_review, or which would go through the normal review flow if they don't).
What happens to existing content when I enable the workflow?
Existing published content is unaffected — it stays published. The workflow only applies to future saves by users without the bypass permission.
What if a reviewer approves content but auto-publish is off?
The review status is set to Approved, the author is notified, but the content stays in draft. A user with publish permission must manually change the status to Published.
Can an author resubmit after a soft rejection?
Yes. After a soft rejection, the author edits the content and clicks Submit for Review again. The new submission replaces the previous pending state and notifies reviewers.
Can a hard rejection be reversed?
Not through the UI — a hard rejection removes the Submit button. A Super Admin can manually update the review_status field in the database, or you can reset it by directly editing the record. For a less drastic approach, use soft rejection when there's any chance the content could be revised.
Does the review workflow work with scheduled content?
No — scheduled publishing bypasses the status lock. If you want scheduled content to go through review, the author should submit for review first and only set a scheduled date after the content is approved.
Is there a way to see all past review decisions (not just pending)?
The audit log stores every decision, but a dedicated UI for browsing the full history is not available in the current version. The log is in the content_review_log database table.
WordPress comparison
WordPress has a partial version of this feature called Pending Review, but it has several gaps:
| Feature | WordPress core | Contensio |
|---|---|---|
| Submit for review | Yes (Contributor role) | Yes |
| Review queue | Basic | Dedicated /reviews screen with sidebar badge |
| Approve and publish | Manual (change status) | One-click approve |
| Reject content | No | Yes — soft and hard rejection |
| Rejection notes | No | Yes — required, shown in email and sidebar |
| Email to reviewers on submit | No | Yes |
| Email to author on decision | No | Yes |
| Audit log | No | Append-only log table |
| Bypass permission | No | content.bypass_review |
| Auto-publish on approval | No | Yes (configurable) |
| Plugin required | PublishPress ($99/yr for notifications) | None — built into core |
WordPress's "Pending Review" status exists, but without notifications it relies on reviewers remembering to check. Without rejection notes, authors don't know what to fix. Without a proper reject action, the only option is to trash the post — which the contributor can't see.
Contensio's workflow is a complete system — not a status flag.