Wordpress - How to let contributors to create a new revision(draft) editing their published posts
Using Role editor or role scope you can set contributors to edit you custom post type but not publish so every change will be set as draft until approval, and to limit the creation of new posts of your custom post type you can use my plugin Bainternet Posts Creation Limits
Update
To force re approval of edits add this code
add_filter( 'wp_insert_post_data', 're_aprove', '99', 2 );
function re_aprove( $data, $postarr ) {
//check if current user is not admin
if ( ! current_user_can( 'manage_options' ) && 'YOUR_CUSTOM_TYPE' === $postarr['post_type'] ) {
if ( 'publish' === $data['post_status'] ) {
$data['post_status'] = 'pending';
}
}
return $data;
}
and change YOUR_CUSTOM_TYPE
to your custom post type name.
Mine didn't work until I added the '99' , 2); to the end of the add_filter.
Here is the reference as to why: http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data
add_filter('wp_insert_post_data','re_aprove', '99', 2);
function re_aprove( $data , $postarr ){
global $current_user;
get_currentuserinfo();
//check if current user is not admin
if (!current_user_can('manage_options') && $postarr['post_type'] == "candy-item" ){
if ($data['post_status'] = "publish"){
$data['post_status'] = "pending";
}
}
return $data;
}