web-dev-qa-db-fra.com

Interdire aux utilisateurs de modifier les publications en fonction de leur âge

Comment puis-je empêcher les utilisateurs (en fonction de capacités ) de modifier leurs publications après un laps de temps personnalisé?.

Par exemple, un utilisateur pouvant publish_posts (auteurs) ne peut pas éditer leur publication si elle date plus de 3 jours, et un utilisateur pouvant moderate_comments (éditeurs) ne peut en éditer aucune. messages âgés de plus de 20 jours. De toute évidence, les administrateurs peuvent modifier à tout moment.

Comment une telle chose est-elle possible?

3
Amanda Duke

J'ai pris l'exemple de code de la page de codex du filtre user_has_cap de Wordpress et l'ai modifié. Ajoutez ce code à votre thème functions.php:

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

// Bail out if we're not asking to edit or delete a post ...
if( ( 'edit_post' != $args[0] && 'delete_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 );
4
Stephen M. Harris