Title: Post Forking
Author: Ben Balter
Published: <strong>September 20, 2012</strong>
Last modified: September 26, 2013

---

Search plugins

![](https://ps.w.org/post-forking/assets/banner-772x250.png?rev=601747)

This plugin **hasn’t been tested with the latest 3 major releases of WordPress**.
It may no longer be maintained or supported and may have compatibility issues when
used with more recent versions of WordPress.

![](https://s.w.org/plugins/geopattern-icon/post-forking_624737.svg)

# Post Forking

 By [Ben Balter](https://profiles.wordpress.org/benbalter/)

[Download](https://downloads.wordpress.org/plugin/post-forking.0.2.1.zip)

 * [Details](https://pcd.wordpress.org/plugins/post-forking/#description)
 * [Reviews](https://pcd.wordpress.org/plugins/post-forking/#reviews)
 *  [Installation](https://pcd.wordpress.org/plugins/post-forking/#installation)
 * [Development](https://pcd.wordpress.org/plugins/post-forking/#developers)

 [Support](https://wordpress.org/support/plugin/post-forking/)

## Description

WordPress Post Forking allows users to “fork” or create an alternate version of 
content to foster a more collaborative approach to WordPress content curation. This
can be used, for example, to allow external users (such as visitors to your site)
or internal users (such as other authors) with the ability to submit proposed revisions.
It can even be used on smaller or single-author sites to enable post authors to 
edit published posts without their changes appearing immediately. If you’re familiar
with Git, or other decentralized version control systems, you’re already familiar
with WordPress post forking.

#### How might you use it?

 * Allowing users without edit or publish post capabilities to edit and submit changes
   to content (similar to [GitHub’s pull request system](https://help.github.com/articles/using-pull-requests))
 * Collaborative editing (by resolving two users’ conflicted saves – [Wired’s example](http://www.wired.com/wiredenterprise/2012/02/github-revisited/))
 * Saving draft changes of already-published content
 * Scheduling pending changes to already-published content

#### How does it work?

When a user without the `edit_post` capability attempts to edit a given post, WordPress
will automatically create a “fork” or alternate version of the post which they can
freely edit. The edit screen will look just like the standard post editing interface
that they are used to. When they’re done, they simply click “submit for review.”
At this point, the fork goes into the standard WordPress moderation queue (just 
like any time an author without the `publish_post` capability submits a post), where
an editor can review, and potentially approve the changes for publishing. If the
changes can be automatically merged, the original post will be updated, otherwise,
the editor will be presented with the ability to resolve the conflicting changes.
All this is done using WordPress’s built-in custom post type, revision, and diff
functionality, so it should look familiar to most WordPress users.

#### Concepts

WordPress Post Forking introduces many of Git’s well-established conventions to 
the WordPress world, and as a result, uses a unique vocabulary to describe what 
it does:

 * **Post** – Any WordPress post that uses the `post_content` field, including posts,
   pages, and custom post types
 * **Fork** – Clone of a post intended for editing without disturbing the parent
   post
 * **Branch** – Parallel versions of the same parent post, owned by the post author
 * **Merge** – To push a fork’s changes back into its parent post
 * **Conflict** – When a post is forked if a given line is changed on the fork, 
   and that same line is subsequently edited on the parent post prior to the merge,
   the post cannot be automatically merged, and the conflict is presented to the
   merger to resolve

#### Why this plugin?

 * [GitHub for Journalism — What WordPress Post Forking could do to Editorial Workflows

#### Project Status

This version constitutes an initial release designed to showcase the plugin’s core
functionality and is intended to be improved upon with additional features and refinements
as the project evolves. Please consider [contributing your time](https://github.com/benbalter/post-forking/wiki/How-to-Contribute)
to help improve the project.

#### More Information

For more information, or to contribute to this documentation, please visit the [Post Forking project wiki](https://github.com/benbalter/post-forking/wiki).

[Photo courtesy [babomike](http://www.flickr.com/photos/babomike/5626846346/)]

### How To Contribute

Post Forking is an open source project and is supported by the efforts of an entire
community. We’d love for you to get involved. Whatever your level of skill or however
much time you can give, your contribution is greatly appreciated.

 * **Everyone** – Help expand [the project’s documentation wiki](https://github.com/benbalter/post-forking/wiki/)
   and answer questions in the support forums to make it easier for other users 
   to get started, or join the discussion on the [P2 (Blog)](http://postforking.wordpress.com)
   to help shape the project’s future.
 * **Users** – Download the [latest development version](https://github.com/benbalter/post-forking/tree/develop)
   of the plugin, and [submit bug/feature requests](https://github.com/benbalter/post-forking/issues).
 * **Non-English Speakers** – [Contribute a translation](http://translations.benbalter.com/)
   using the GlotPress web interface – no technical knowledge required ([how to](http://translations.benbalter.com/projects/how-to-translate)).
 * **Technical Folks** – [Fork the development version](https://github.com/benbalter/post-forking/tree/develop)
   and submit a pull request, especially for any [known issues](https://github.com/benbalter/post-forking/issues).
   [This tutorial](https://help.github.com/articles/set-up-git) may be helpful if
   you’re new to git.

### Roadmap

#### Future Features (Maybe):

 * Front end editing (just click edit, make your change, hit submit)
 * Ability to fork more than just the `post_content` (e.g., taxonomies, post meta)
 * [Appending parent revision history to fork](https://github.com/benbalter/post-forking/issues/15)
 * Spoofing `post_type` so metaboxes, etc. appear
 * [Author pages for fork contributors](https://github.com/benbalter/post-forking/issues/17)
 * [Open Enhancements](https://github.com/benbalter/post-forking/issues?labels=enhancement&page=1&state=open)

### Under The Hood

** **Warning: geek content!** **

Forking a post creates a copy of the most recent version of the post as a “fork”
custom post type. Certain fields (e.g., `post_content`, `post_title`) are copied
over to the new fork. The plugin also stores the revision ID for the revision prior
to when the fork was created (see [`includes/revisions.php`](https://github.com/benbalter/post-forking/blob/master/includes/revisions.php#L2)
for more information as to why we store the previous revision).

The fork post type has its own capabilities, allowing a user without the ability
to edit or publish on the parent post to edit a fork. Once changes have been made,
assuming the user does not have the `publish_fork` capability, the user would submit
the fork for review (similar to submitting a Pull Request in GitHub parlance) using
the normal WordPress moderation system.

Publishing a fork (either by the fork author, if they have the capability, or my
an editor) triggers the merge itself. The post content of the fork undergoes a three
way merge with the base revision and current version of the parent post.

A fork can have three post statuses:

 1. Draft – The fork is being edited
 2. Pending – The fork has been submitted for publication
 3. Published – The fork has been merged

Note: No user should have the `edit_published_fork` capability. Once published, 
the fork post_type simply exists to provide a record of the change and allow the
author page, to theoretically list contributions by author.

### Where To Get Support Or Report An Issue

_There are various resources available, depending on the type of help you’re looking
for:_

 * For getting started and general documentation, please browse, and feel free to
   contribute to [the project wiki](https://github.com/benbalter/post-forking/wiki).
 * For support questions (“How do I”, “I can’t seem to”, etc.) please search and
   if not already answered, open a thread in the [Support Forums](https://wordpress.org/support/plugin/post-forking).
 * For technical issues (e.g., to submit a bug or feature request) please search
   and if not already filed, [open an issue on GitHub](https://github.com/benbalter/post-forking/issues).
 * For implementation, and all general questions (“Is it possible to..”, “Has anyone…”),
   please search, and if not already answered, post a topic to the [general discussion list serve](https://groups.google.com/forum/#!forum/post-forking)
 * For general discussion about the project and planning, please see the [P2](http://postforking.wordpress.com)

## Installation

#### Automatic Install

 1. Login to your WordPress site as an Administrator, or if you haven’t already, complete
    the famous [WordPress Five Minute Install](https://codex.wordpress.org/Installing_WordPress)
 2. Navigate to Plugins->Add New from the menu on the left
 3. Search for Post Forking
 4. Click “Install”
 5. Click “Activate Now”

#### Manual Install

 1. Download the plugin from the link in the top left corner
 2. Unzip the file, and upload the resulting “post-forking” folder to your “/wp-content/
    plugins directory” as “/wp-content/plugins/post-forking”
 3. Log into your WordPress install as an administrator, and navigate to the plugins
    screen from the left-hand menu
 4. Activate Post Forking

#### Building

To compile javascript / stylesheets, simple run `script/build` from the projet’s
root directory.

## FAQ

Please see (and feel free to contribute to) the [Frequently Asked Questions Wiki](https://github.com/benbalter/post-forking/wiki/Frequently-Asked-Questions).
Please see (and feel free to contribute to) the [Frequently Asked Questions Wiki](https://github.com/benbalter/post-forking/wiki/Frequently-Asked-Questions).

## Reviews

![](https://secure.gravatar.com/avatar/f2a4b991356cc707cbe41edd396d5bf1c22cbf84d70e98fea3dfcc2265e775ba?
s=60&d=retro&r=g)

### 󠀁[Amazing!](https://wordpress.org/support/topic/amazing-2648/)󠁿

 [Vladimir Vassilev](https://profiles.wordpress.org/vloo/) May 25, 2020

I wish I knew about this one some years ago when I was helping a few publishers 
with polishing their editorial workflows… This seems to be running just fine even
now, 7 years after its last update o_0

 [ Read all 5 reviews ](https://wordpress.org/support/plugin/post-forking/reviews/)

## Contributors & Developers

“Post Forking” is open source software. The following people have contributed to
this plugin.

Contributors

 *   [ Ben Balter ](https://profiles.wordpress.org/benbalter/)
 *   [ Daniel Bachhuber ](https://profiles.wordpress.org/danielbachhuber/)
 *   [ Aaron Jorbin ](https://profiles.wordpress.org/jorbin/)

[Translate “Post Forking” into your language.](https://translate.wordpress.org/projects/wp-plugins/post-forking)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/post-forking/), check
out the [SVN repository](https://plugins.svn.wordpress.org/post-forking/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/post-forking/) by
[RSS](https://plugins.trac.wordpress.org/log/post-forking/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.2

 * WP 3.6 compatibility (props @alleyinteractive, @netaustin)
 * “View fork” preview should try to use template redirect intelligently (props 
   @goldenapples)
 * Documentation fixes (props @yurivictor)
 * Better diffing (props @neuaustin)
 * Better tests (props @jorbin)
 * Preserve line breaks on merge (#81)
 * Ability to delete forks (#85)
 * Added merge API hook (props @pablovallejo)
 * Minor security fixes (props @joncave, @paulgibbs)
 * Better i18n (props @boddhi, @bueltge)
 * Added Dutch translation (props @bjornw)
 * Added French translation (props @fxbenard)
 * Added German translation (props @bueltge)
 * Make `post_id` an optional argument on `title_filter` to prevent errors in P2
   theme (props @japh)
 * Added build file to minify JS and CSS (props @jorbin)
 * Improved UI
 * [Complete changelog](https://github.com/post-forking/post-forking/compare/0.1...master)

#### 0.1

 * Initial release

## Meta

 *  Version **0.2.1**
 *  Last updated **13 years ago**
 *  Active installations **20+**
 *  WordPress version ** 3.5 or higher **
 *  Tested up to **3.6.1**
 *  Language
 * [English (US)](https://wordpress.org/plugins/post-forking/)
 * Tags
 * [collaboration](https://pcd.wordpress.org/plugins/tags/collaboration/)[forking](https://pcd.wordpress.org/plugins/tags/forking/)
   [forks](https://pcd.wordpress.org/plugins/tags/forks/)[posts](https://pcd.wordpress.org/plugins/tags/posts/)
   [version control](https://pcd.wordpress.org/plugins/tags/version-control/)
 *  [Advanced View](https://pcd.wordpress.org/plugins/post-forking/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  5 5-star reviews     ](https://wordpress.org/support/plugin/post-forking/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/post-forking/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/post-forking/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/post-forking/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/post-forking/reviews/?filter=1)

[Add my review](https://wordpress.org/support/plugin/post-forking/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/post-forking/reviews/)

## Contributors

 *   [ Ben Balter ](https://profiles.wordpress.org/benbalter/)
 *   [ Daniel Bachhuber ](https://profiles.wordpress.org/danielbachhuber/)
 *   [ Aaron Jorbin ](https://profiles.wordpress.org/jorbin/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/post-forking/)