WP Branches For Post adds a Git-like editorial workflow to WordPress. When a published page or post needs a larger edit, you do not have to change the live content directly. Create a private working branch, edit it in the normal WordPress editor, review the differences, and merge only when you are r
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 6.6 and PHP 8.2.
SourceWordPress plugins · Oct 20, 2026
01 / Source details
About this tool.
WP Branches For Post adds a Git-like editorial workflow to WordPress.
When a published page or post needs a larger edit, you do not have to change the live content directly. Create a private working branch, edit it in the normal WordPress editor, review the differences, and merge only when you are ready. The public original keeps its post ID, URL and publication identity throughout the workflow.
Version 2.3.3 also sets the branch language before copying translated categories and tags on Polylang sites. Version 2.3.2 stopped copying internal translation groups. Regular editorial taxonomies, including language and categories, remain supported. Version 2.3 adds selective, per-field conflict resolution inside Gutenberg; independent reviewers can approve the exact proposed Original/Branch decisions before a guarded merge. Version 2.2 introduced editorial approvals, scheduling and conservative block-aware merging.
What’s new in 2.3.0
Resolve eligible conflicting post fields individually in Gutenberg; choose current Original or Branch, review the three-way comparison and confirm before merging.
For sites requiring independent approval, submit exactly which conflicting values you want kept; a separate authorized reviewer approves those specific choices and the current content snapshot.
Refuse incomplete or modified choices, stale reviews, unsafe or unsupported fields, and attempts to substitute different choices after approval.
Keep original-only updates, original post ID, URL and history intact; never copy internal review proposals to published content.
Review, approve and schedule from the existing Post Branch editor sidebar; inspect proposed choices in Tools > Branch Workflow.
Improve responsive and keyboard-operated workflow controls.
Tested with real WordPress 7.1.3 / PHP 8.2, 8.3 and 8.4 installations, WordPress 6.6 baseline, Gutenberg browser automation, and popular editor/SEO plugin coexistence.
Some newly introduced workflow interface messages fall back to English pending separately approved Japanese and Chinese translations; existing approved translation catalogs are preserved.
What’s new in 2.2.0
Merge independent Gutenberg top-level block edits while safely rejecting ambiguous or overlapping changes.
Request independent editorial approval; administrators may require approval for every branch merge.
Schedule safe merges for a future site-local time, with renewed permission, approval and conflict checks at execution.
Find pending editorial reviews under Tools > Branch Workflow; use the branch admin-bar and post-list shortcuts.
Safely synchronize independent Yoast SEO, Elementor and ACF metadata changes.
Review and scheduled merge behavior use the same original-preserving merge service as manual actions. Scheduled merges depend on WP-Cron and may run later than the selected time on low-traffic sites. New workflow labels are available in English until their translations are separately reviewed; existing translations are unaffected.
The workflow at a glance
01Open a published, private or scheduled post, page, or supported custom post type.
02Open the Post Branch panel and choose “Create branch”.
03WordPress opens an isolated draft branch. The public original is unchanged.
04Edit the branch normally. Preview the branch whenever you need to.
05Choose “Review changes”.
06Review branch changes, newer original changes, conflicts, and identity changes.
07If the original has newer non-conflicting edits, choose “Update branch from original” when you want the branch to include them before continuing.
08When the review is clean, choose “Save & merge into original”.
09If both sides changed the same value differently, review the conflict and use force merge only when you intentionally want the branch value for the listed conflict.
10After a successful merge, the original remains the public post and the working branch is moved to Trash.
Feature guide with screenshots
The screenshots on the plugin page follow the same workflow described below, so you can see what each control looks like before using it:
Screenshot 1 — Start safely: open the Post Branch panel on the original and choose “Create branch”. The live post is not edited.
Screenshot 2 — Work in isolation: the branch editor shows its relationship to the original, preview links, review state, and the actions available for that branch.
Screenshot 3 — Review before merging: “Review changes” opens the three-way comparison so you can inspect the baseline, current original, and branch values together.
Screenshot 4 — Bring in safe upstream work: when the original has newer non-conflicting changes, “Update branch from original” becomes available.
Screenshot 5 — Continue after updating: after the branch is refreshed from the original, the editor reloads with the rebased state and a fresh merge review.
Screenshot 6 — Stop on real conflicts: when both the original and branch changed the same mergeable value differently, normal merge is blocked and the conflicting paths are shown.
Screenshot 7 — Force only after review: force merge uses a separate destructive confirmation and prefers the branch value only for reviewed conflicts.
Screenshot 8 — Refuse stale reviews: if the branch or original changes after review, the merge is stopped and the current state must be reviewed again.
Screenshot 9 — Discard explicitly: abandoning a branch requires confirmation and moves only the branch to Trash; the public original is untouched.
Screenshot 10 — See active work from the original: the original post lists existing branches and their current review states.
Screenshot 11 — Keep normal WordPress navigation: branch state and quick actions remain available from the post list.
Screenshot 12 — Understand synced-pattern scope: branches that reference synced patterns display a warning because editing the synced pattern itself is global in WordPress.
What the Post Branch panel tells you
On an original post, the panel shows whether a branch can be created and lists active branches you can edit.
On a branch, the panel shows:
A link back to the original.
Branch and original preview links.
The branch creator.
The current review state.
How many branch changes and conflicts were detected.
“Review changes” to open the detailed merge review.
“Update branch from original” when newer original changes can be brought into the branch safely.
“Save & merge into original” when the branch can be merged normally.
An explicit force-merge path for reviewed conflicts.
“Discard branch” when the working branch should be abandoned.
Understanding the review states
Clean: no incompatible newer change prevents a normal merge.
Update available: the original contains newer non-conflicting work. The plugin can update the branch while keeping branch-only edits.
Informational: the original changed identity-related data that the branch is not allowed to overwrite, such as slug or publication identity.
Conflict: the original and the branch changed the same mergeable data differently. Normal merge is blocked until you review the situation.
Legacy/unknown: an older branch does not have the full 2.1 baseline needed for an exact three-way review. Review it manually before any force merge.
Missing: the original can no longer be safely resolved, so merge is unavailable.
What the merge review contains
The review separates changes into four groups:
Branch changes: mergeable values changed in the working branch.
Original changes since branch creation: newer changes made directly to the original.
Conflicts: paths changed differently on both sides.
Original identity changes preserved by merge: changes the plugin deliberately does not overwrite.
For reviewable fields, the panel also shows the baseline, current original and branch values so you can understand why an item is listed.
What is synchronized
A successful merge can synchronize normal editorial content, supported post meta, and taxonomies.
The plugin intentionally preserves the original post’s identity and publication state. In particular, the merge does not replace the original post ID, GUID, slug, author or publication dates. For hierarchical content, the branch cannot change the original parent relationship because that can change a public URL.
Media IDs already referenced by content and featured-image metadata remain usable. Attachments are not re-parented.
Editing while someone changes the original
Version 2.1 uses the baseline captured at branch creation to distinguish three situations:
Only the branch changed a value: the branch value can be applied.
Only the original changed a value: the newer original value is preserved.
Both changed the same value differently: the value is a conflict and normal merge is blocked.
This is why a branch can often merge safely even when the original changed after branch creation.
Update branch from original
When the original has newer non-conflicting changes, “Update branch from original” rebases the working branch onto the newer original state.
Branch-only work is preserved, original-only work is imported into the branch, and a fresh baseline is recorded. If the operation cannot complete safely, the plugin attempts to restore the branch to its previous state instead of leaving a partial update.
Force merge
Force merge is intentionally not the default path.
It is offered only after a conflict is detected and reviewed. For listed merge conflicts, force merge prefers the branch value. Non-conflicting newer work on the original is still preserved.
Extensions can further restrict who is allowed to force merge through the plugin’s capability/filter boundary.
Synced patterns
A WordPress synced pattern is global content. Editing the synced pattern itself changes that pattern everywhere it is used and is not isolated by a post branch.
When a branch references synced patterns, WP Branches For Post warns you in the branch panel so that global pattern edits are not mistaken for isolated branch edits.
Safety and failure handling
Branches stay non-public and normal WordPress publishing is forced back to draft.
Mutating op
See it in action
Screenshots & previews.
Original post: the Post Branch panel explains the isolated workflow and provides the Create branch action.Working branch: branch status, original/branch preview links, Review changes and Discard branch controls.Merge review: a three-way comparison of baseline, current original and branch values before merge.Update available: newer non-conflicting original changes can be brought into the branch with Update branch from original.Updated branch: the rebased branch reloads with the newest safe original changes and a fresh review state.Conflict protection: normal merge is blocked when both sides changed the same value differently.Force merge confirmation: an explicit destructive confirmation is required before reviewed conflicts can prefer branch values.Stale review protection: a merge is stopped when the branch or original changed after the state was reviewed.Discard confirmation: the branch can be moved to Trash without modifying the public original.Existing branches on the original: active branches and their review states are visible before creating more work.Post list integration: branch state and quick branch actions remain available from WordPress admin lists.Synced pattern warning: the editor explains that editing a referenced synced pattern is global and not isolated by the branch.
02 / Source details
Getting started.
01Install WP Branches For Post from the WordPress Plugins screen, or upload it to /wp-content/plugins/wp-branches-for-post .
02Activate the plugin.
03Open an existing published, private or scheduled post/page in the editor.
04Open the Post Branch panel in the editor settings sidebar.
05Choose “Create branch” to begin a safe working copy.
No separate settings page is required for the normal workflow.
03 / Source details
Frequently asked questions.
How do I request review and approval?
Open a working branch and choose Branch review & schedule from the admin bar, or go to Tools > Branch Workflow. Request review after saving meaningful changes. Another authorized editor can inspect the Base / Original / Branch comparison and approve or request changes. The branch creator cannot approve their own proposal.
Is independent approval mandatory for all sites?
No. This policy is off by default to preserve existing workflows. Administrators may enable it under Tools > Branch Workflow; when enabled, even a direct or forced merge requires an approval matching the current branch state. Editing either the original or the branch invalidates that approval.
Can I schedule a merge for later?
Yes. Choose a future site-local time in Branch Workflow. At execution, the plugin rechecks the original and branch, permissions, approval and conflicts. It never force-merges on a schedule and will not overwrite a stale version. WP-Cron is traffic-dependent, so use a reliable server cron runner if timeliness matters.
Can it combine changes made to different Gutenberg blocks?
Yes, when both sides edited independent, unambiguous top-level blocks and the saved markup can be preserved without loss. Shared/synced patterns, HTML freeform content, ambiguous blocks and overlapping edits still require manual review; unsafe changes are not silently merged.
Is a branch public?
No. A branch is an isolated working draft. A normal WordPress publish attempt is forced back to draft. Use the plugin’s merge action when the work is ready.
Does merging change the original URL or post ID?
No. The existing original post remains the public resource. Its post ID and identity are preserved, and identity-related values such as slug, author and publication dates are not taken from the branch.
What happens if someone edits the original while I am working?
The plugin compares the original, the branch and the saved baseline. Original-only work can be preserved, non-conflicting work can be rebased, and overlapping divergent edits are reported as conflicts instead of being silently overwritten.
Do I have to update the branch before every merge?
No. If newer original changes do not conflict with the branch, the three-way merge can preserve them. Updating the branch first is useful when you want to continue editing on top of the newest original state.
What does force merge overwrite?
For conflicts you explicitly review, force merge prefers the branch value. Newer original work that does not conflict with the branch is still preserved.
Can I preview the branch before merging?
Yes. The branch panel provides a branch preview link and a link to the current original so you can compare them outside the editor.
What happens when I discard a branch?
The branch is moved to Trash. The original post is not changed.
What happens after a successful merge?
The original is updated through WordPress, keeping its identity, and the merged branch is moved to Trash.
Are categories, tags and custom taxonomies included?
Supported taxonomies are synchronized as part of the branch workflow, including clearing a taxonomy when that is the reviewed branch state.
Is post metadata included?
Supported post metadata is synchronized. Runtime/plugin bookkeeping keys are excluded, and extensions can add their own exclusions.
What about featured images?
Featured-image metadata is part of normal synchronized metadata. The referenced media item keeps its existing attachment identity.
Are synced patterns isolated?
No. Synced patterns are global WordPress entities. The plugin detects references and warns you, but editing a synced pattern itself affects every place that pattern is used.
Does it support custom post types?
Yes, when the post type uses the normal WordPress editing APIs and the current user has the required capabilities.
Can I use branches created by older plugin versions?
Yes. Compatibility paths remain, but older branches may not have the full 2.1 baseline required for detailed three-way review and are therefore handled more conservatively.
Website LLMs.txt and LLMs-Full.txt Generator is an LLMs.txt generator and llms-full.txt generator for WordPress. It helps site owners generate, manage, preview, validate, and serve AI discovery files from published public content. Use it to create structured /llms.txt and optional /llms-full.txt end
EngageDock AI is a customizable floating contact widget for WordPress websites that want more leads and faster visitor communication. It helps small businesses turn website traffic into calls, texts, emails, and callback requests from one clean contact panel. Key Features: Click-to-Call – One tap ca
Altify AI is an auto ALT text and AI ALT text plugin for WordPress images. It helps generate descriptive image ALT text for accessibility and image SEO. Use bulk image ALT text tools for your Media Library, generate featured image ALT text automatically, and scale WooCommerce image ALT updates with
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati