web-dev-qa-db-fra.com

Comment permettre aux contributeurs de créer une nouvelle révision (brouillon) modifiant leurs publications

J'utilise un type d'article personnalisé pour permettre aux contributeurs d'avoir une page personnelle sur le site.

Chaque fois qu'un utilisateur s'inscrit sur mon site, un script crée une publication de type personnalisée avec l'utilisateur qui s'enregistre comme auteur.

Pour modérer les entrées des utilisateurs, cet article est publié par un éditeur.

J'aimerais que les utilisateurs (contributeurs) soient:

  • impossible d'ajouter d'autres publications de ce type personnalisé;
  • capable d'éditer le post déjà publié dont ils sont l'auteur;
  • et leurs modifications doivent être approuvées par un éditeur avant d'être publiées.

J'utilise Éditeur de rôle utilisateur pour gérer les rôles et les fonctionnalités.

Y-a-t-il un moyen de faire ça?

5
bluantinoo

À l'aide de l'éditeur de rôle ou de la portée du rôle, vous pouvez définir les contributeurs pour qu'ils modifient votre type de publication personnalisé sans les publier. Par conséquent, chaque modification sera définie comme brouillon jusqu'à son approbation. Pour limiter la création de nouvelles publications de votre type de publication personnalisée, vous pouvez utiliser mon plugin Limites de création de publications de Bainternet

Mettre à jour

Pour forcer la réapprobation des modifications, ajoutez ce 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;
}

et remplacez YOUR_CUSTOM_TYPE par le nom de votre type de message personnalisé.

5
Bainternet

Le mien n'a pas fonctionné jusqu'à ce que j'ajoute le '99', 2); à la fin du add_filter.

Voici la référence expliquant pourquoi: 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;
}
3
Dave Williams

enfin, j'ai résolu using Revisionary plugin, http://wordpress.org/extend/plugins/revisionary/ il est utilisé pour faire exactement ce que je demande dans le sujet. Titre

pour un contrôle plus détaillé des capacités (avec la révision déjà intégrée), il y a Role Scoper http://wordpress.org/extend/plugins/role-scoper/

le premier est vraiment facile à installer et à utiliser, le second a besoin de beaucoup plus de pratique, l'interface utilisateur est un peu déroutant, mais c'est vraiment puissant

1
bluantinoo