Question

In Wordpress, how can I restrict users (based on Capabilities) from editing their published posts after a custom amount of time.

For instance, a user that can publish_posts (authors) can not edit a their post if it is older than 3 days, and a user that can moderate_comments (editors) can not edit any posts that are older than 20 days. Obviously, admins can edit anytime.

How is such thing possible?

Was it helpful?

Solution

This is the duplicate of a question on wordpress.stackexchange.com. I've copied my answer below.

I took the example code from the Wordpress user_has_cap filter codex page and modified it. Add this code to your theme functions.php:

function restrict_editing_old_posts( $allcaps, $cap, $args ) {

  // Bail out if we're not asking to edit a post ...
  if( 'edit_post' != $args[0]
    // ... or user is admin
    || ! empty( $allcaps['manage_options'] )
    // ... or user already cannot edit the post
    || empty( $allcaps['edit_posts'] ) )
      return $allcaps;

  // Load the post data:  
  $post = get_post( $args[2] );

  // Bail out if the post isn't published:    
  if( 'publish' != $post->post_status )
      return $allcaps;

  $post_date = strtotime( $post->post_date );
  //if post is older than 30 days ... 
  if( $post_date < strtotime( '-30 days' )
    // ... or if older than 4 days and user is not Editor
    || ( empty($allcaps['moderate_comments']) 
    && $post_date < strtotime('-4 days') ) ) {
      $allcaps[$cap[0]] = FALSE;  
  }
  return $allcaps;
}
add_filter( 'user_has_cap', 'restrict_editing_old_posts', 10, 3 );

OTHER TIPS

This should work inside a plugin

    function remove_edit() {

    // Adjust 604800 to the number of days in seconds that you want to check against. Posts will only appear if they are newer than that time.//
     if ( !current_user_can( 'manage_options' ) && (current_user_can('edit_posts') && ((current_time(timestamp) - get_the_time('U') - (get_settings('gmt_offset') * 3600) ) < 604800) )
     {
        unset( $actions['edit'] );
     }
   }
   add_filter('post_row_actions','remove_edit',10,1);

From wordpress codex http://codex.wordpress.org/Roles_and_Capabilities#edit_posts

edit_posts
  Since 2.0
  Allows access to Administration Panel options:
   Posts
   Posts > Add New
   Comments
   Comments > Awaiting Moderation
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top