38

Say I've already published a page or post. I now want to make changes, but I want a colleague to check them over before they go live. Is there any way of doing this?

Edit: I do realise this isn't currently possible as such and it's creative workarounds I'm interested in.

On the site I'm currently working on, I also have a separate password protected 'staging' site for drafting major content changes/additions, and once approved I copy and paste to the live site. I'm wondering if anyone's used a similar method, but perhaps automated the 'push' to the live site?

I'm aware of this question: Database synchronization between dev/staging and production, but that's more about wholesale synchonization of entire databases rather than individual pages or posts.

Now offering a bounty in order to try and drive out some additional ideas for workarounds.

12 Answers 12

22
+50

It should be possible to add a button to the Publish box Save as changed copy. You have to hook into content_save_pre then and copy the content and all meta data into a new post with a draft status. After the review the posts have to be merged back.

I haven’t done this yet, but it is really needed.

  • 2
    I like this simple idea. The API only needs a Copy Post Revision function that is able to copy a full revision incl. the metadata to a new (yet not created) or to an existing post. That done, the draft post copy can be copied over to the original post later then. – hakre Nov 12 '10 at 22:56
  • @toscho I was just wondering if it's still the best way to go about the problem? Maybe someone has got an example code or something a bit more concrete? Thanks – dashaluna Nov 22 '11 at 13:38
11

http://wordpress.org/extend/plugins/revisionary/

This plugin will do what you want. It creates a role Revisor that is kind of in between Contributor and Editor. The UI could be improved and the internal code had to work around a lot of WordPress' missing features, but yeah, this solves your problem: It will allow you to save a draft (actually a 'pending' 'revision').

2018 Update: Revisionary seems to have stopped development about 3 years ago. However, see Tessa's answer about Revisionize (https://wordpress.org/plugins/revisionize). Revisionize looks like the best solution.

2019 Update: Revisionary is now owned and being actively developed by PublishPress. The original author is also working with them to support it.

  • I just tested this plugin on a newly upgraded 3.1.2 install. The process of actually applying the pending revision seems broken. Given the sparsity of the documentation, it's not clear if it's broken in 3.1.2, or if the intended UX is that the approving party must copy-paste the revision into the published post manually. In any case, I'm not pushing this out to my users. – marfarma Jun 3 '11 at 23:37
  • The UI is pretty wacky, but that's because there's no real way to integrate it into WP properly as far as I can tell. WP just lacks the hooks for it. When I tested it, it did work however... there's a button or link somewhere that 'restores' the revision. You shouldn't have to copy-paste anything. I've since switched to having the user just email the editor with revision request specifically because I don't like the UI. – WraithKenny Jun 15 '11 at 22:24
  • Agree, this plugin if often broken for me, and incredibly awful to use. – James Feb 11 '15 at 23:46
  • I haven't used it in 3 1/2 years; I wouldn't assume it'd still work. There must be a new/better way of doing this, since things in WP core have improved greatly since this post. – WraithKenny Feb 17 '15 at 16:37
  • 1
    Seems to be working as of today – John Oct 16 '15 at 16:28
6

Hi @e100;

If you were interested in a custom plugin solution I can envision several approaches.

  1. A process similar to what @toscho described as "Save as Changed Copy" but with some subtle differences. The plugin could lock editing of published posts but allow you to create derived posts with a new status like "Updated Draft" which could be tied back to the original post via a custom field. These derived posts could then be edited, reviewed, etc. but instead of having the option to publish you would have the option to replace the original post with your update.

  2. Another process could use the built-in revision system although I'd have to do some research to figure out how to serve to the browser a version that is not the most recent; maybe save the content off as a custom field and allow you to continue to work on it.

  3. A third process might be to set up a second WordPress site as an editing sandbox, use web services to retrieve the posts, allow you to edit them remotely, and then when you are ready to publish them you could push back to the main site.

  4. Similar to #3 you could set up an editing sandbox using a WordPress Multisite install and create non-public blogs for each author to have as their own editing sandbox.

Again, all those options would require custom plugin development.

If you are looking for existing plugins you want to take a look at these albeit I don't yet has specific experience with them so I don't know if any of these will do exactly what need:

  • Assignment Desk is an editorial tool for news organizations using WordPress as their content management system. The goal of the plug-in is to make community engagement with the news production process easier and more efficient.

  • Edit Flow offers a suite of functionality to redefine your editorial workflow within WordPress.

  • Peter's Post Notes - Add notes on the "edit post" and "edit page" screens' sidebars in WordPress 2.8 and up. When used with Peter's Collaboration E-mails 1.2 and up, the notes are sent along with the e-mails in the collaboration workflow. There is also a general and private notes system on the dashboard.

  • your 1st suggestion sounds like a very cool solution! Oh and Happy Thanksgiving Mike, seeing that your ALWAYS the one giving excellent advice/solutions to all of us! – NetConstructor.com Nov 29 '10 at 18:02
  • 1
    All of those suggestions are for plugins that handled UNpublished posts. What WordPress doesn't have (that all other CMSes do) is a way to save drafts-in-progress of revisions to already published posts. – James Feb 11 '15 at 23:48
5

This is a really old question, and while looking at some of the plugins mentioned here, I noticed that many aren't maintained or not quite what I was looking for.

In the end, I found one I liked called Revisionize. While it's reputation and usage isn't up yet since it's rather new, I like it.

Pros:

  1. Nice UI within WordPress, buttons are easy to find and there are warnings and notes when you're using the plugin what pressing buttons will do.
  2. Has a 5 star 4.9 star rating
  3. Still maintained by its developer
  4. Compatible with Advanced Custom Fields plugin
  5. Compatible with Public Post Preview plugin

Cons:

  1. Only 300+ 4,000+ active installs
  2. Only 4 reviews 21 reviews
  3. No Gutenberg support

Updated lists on August 15, 2019. While it's still a great plugin, if you're using the Gutenberg blocks editor, it might not be for you.

  • 1
    Hey I'm the plugin author of Revisionize. It's come a long way - about to launch version 2.1 which adds improved multisite/network compatibility. The latest version has a basic settings panel and there are now a few paid addons available form revisionize.pro that adds support for contributors to revisionize existing content and submit changes for review. There are now 1000+ active installs and 11 5-star reviews. – Jamie Chong Mar 7 '18 at 6:43
  • Yeah, you are up to 18 5-star reviews! I really believe this (and Revisionize) should be the accepted answer now-a-days. – WraithKenny Oct 4 '18 at 16:23
3

Not at this time, unfortunately. If the page/post is already published, your only recourse would be to create a new page/post to hold your edits and privately publish it so your colleague can check your changes. Then replace the content on your live page/post with the revised version.

Just FYI: Making draft-status changes to already published content is a workflow not employed by many WordPress users. I've heard of at least 3 different ways people want it to be done in the past month, too ... so without a standard here-is-how-you-submit-revisions-to-already-published-content workflow, chances of this ever being a feature of WordPress are slim.

  • 2
    Hmmm, it does seem odd to me that this kind of workflow isn't in greater demand, especially as WP is increasingly pushed as a full-featured CMS with custom content types, etc. – e100 Nov 13 '10 at 13:14
  • 1
    The problem is that "this kind of workflow" is defined differently by so many different people. If there were a standard, it would be easy to include. Without a standard, customizing WP for one workflow alienates the others. As it stands, it's easier to let developers build custom solutions for specific situations. – EAMann Nov 14 '10 at 0:31
  • I'd be really interested in hearing those three different ways people want to manage workflow. – MikeSchinkel Nov 22 '10 at 10:52
  • The two I can remember specifically: 1) Role-based: Contributers can edit the content of a post and click "submit revision" which must be reviewed before the changes go live. 2) Split Revisions: Users can select a review of any post and automatically copy the revision into a new post without rolling the existing post back. – EAMann Nov 22 '10 at 16:00
3

maybe an easy solution: the plugin http://wordpress.org/extend/plugins/duplicate-post/ for copy a post

2

Hi @e100 :)

I think smart solution would be for you to use an existing free plugin. It does all the things you wrote about. Just download it from WordPress.org: https://wordpress.org/plugins/revision-manager-tmc/
This plugin is very often and regularly updated

Revision Manager TMC works great with the second free plugin to edit the user role capabilities - User Role Editor https://wordpress.org/plugins/user-role-editor/

  • 1
    As of 2019 this is the most complete solution. It's similar to Revisionize, but more intuitive and more complete. 1) Revisions are linked to the original posts; 2) Allows you to assign editors a "Contributed Role", while restricting them from the original post; 3) It makes the revisions feel like revisions, i.e. hides the publishing options, etc.. – timofey.com Apr 1 at 23:52
  • And ACF support. – D_N Jun 12 at 23:10
1

While this probably won't solve your specific problem I suggest you look at the "Edit Flow" plugin on wordpress.org. It's a very slick plugin which may very well be of use to you.

  • Nope. Editflow only allows setting up multiple statuses of UNpublished posts. What's needed is a way to save drafts of updates-in-progress to already published posts. it's one of the most stunning ommissions in WordPress. – James Feb 11 '15 at 23:45
1

There's a plugin called Live drafts that seems to work quite well?

http://wordpress.org/extend/plugins/live-drafts/

0

There is now a very neat solution to this with a plugin Drafts of Post Revisions.

Users can be permitted to create a draft revision of a published post (or custom post type) which is created as a child copy of the post.

Drafts can be compared to its published parent via the compare revisions feature.

On publishing a draft revision, any changes are integrated back to the parent as the draft is disposed. Multiple drafts can also be maintained.

Would recommend this one to anyone - it's becoming a standard plugin for WordPress sites. However, I suspect we may see this kind of feature being developed in the WordPress core in near future..

  • 5 years since update – D_N Jun 12 at 23:14
0

I'll probably end up using one of the plugins mentioned in other answers, but when I needed this functionality, and didn't have time to go looking for plugins, was to ensure revisions were working, save the changes and immediately revert them.

Now my "draft" is in my revision system.

Not great on a production system, but good enough on a dev system, until you decide on a plugin to use.

0

Found this answer here which worked for me. I modified it slightly as I am using custom user roles.

function published_to_pending( $post_id ) {
    global $post;
    if ( ! is_object( $post ) ) {
        return;
    }

    if ( ! current_user_can( 'publish_posts' ) && $post->post_status == 'publish' ) {
        // stop recursion call
        remove_action( 'save_post', 'published_to_pending' );

        // update the post, which calls save_post again
        wp_update_post( array( 'ID' => $post_id, 'post_status' => 'pending' ) );

        // re-hook this function back
        add_action( 'save_post', 'published_to_pending' );
    }
} 

add_action( 'save_post', 'published_to_pending' );

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.