web-dev-qa-db-fra.com

Autoriser l'utilisateur à modifier les messages sans ajouter de nouveau?

Pour l'un de mes types de publication personnalisé, je souhaite qu'un utilisateur spécifique puisse modifier les publications existantes créées par l'administrateur, mais pas ajouter de nouvelles publications.

Comment cela peut-il être fait?

Si je définis le rôle d'utilisateur comme ne pouvant pas publier, cela leur permet toujours d'ajouter un nouveau message et de le soumettre pour révision.

4
fxfuture

Vous devrez faire quelque chose comme ça:

function hide_buttons() {
    global $current_screen;

    if($current_screen->id == 'edit-post' && !current_user_can('publish_posts')) {
        echo '<style>.add-new-h2{display: none;}</style>';  
    }
}
add_action('admin_head','hide_buttons');

Voir: http://erisds.co.uk/wordpress/spotlight-wordpress-admin-menu-remove-add-new-pages-or-posts-link pour référence

3
sorich87

La réponse précédente ne masque que l'élément de menu avec CSS, et comme @ezejielDFM le souligne, cela n'empêchera pas les utilisateurs de de pouvoir ajouter des publications.

Au lieu de cela, lors de l'enregistrement de votre type de publication personnalisé, vous devez définir la valeur create_posts sur do_not_allow (ou false dans les versions de Wordpress inférieures à 4.5) et définir de manière cruciale le map_meta_cap sur true.

register_post_type( 'custom_post_type_name', array(
    'capability_type' => 'post',
        'capabilities' => array(
        'create_posts' => 'do_not_allow', // Prior to Wordpress 4.5, this was false
    ),
    'map_meta_cap' => true, //  With this set to true, users will still be able to edit & delete posts
));

Si map_meta_cap est omis, sa valeur par défaut est false et bien que vous ayez désactivé la possibilité de Ajouter de nouveaux messages, vous ne pourrez pas non plus modifier ni supprimer les messages existants, alors assurez-vous d'inclure cette valeur.

Le crédit complet va à cette réponse sur Stack Overflow.

5
indextwo