web-dev-qa-db-fra.com

Comment empêcher des types de publication spécifiques d'être lus ou ajoutés par des rôles d'utilisateur spécifiques (par exemple, auteur)?

Je ne suis pas très clair sur la manière de restreindre l'accès des types de publication de zone administrative à des rôles d'utilisateur spécifiques.

Dans mon cas, j'ai un type de message tel que "fournisseurs" que je ne souhaite pas montrer aux "auteurs".

Par défaut, WP permet aux auteurs de parcourir, d'ajouter ou de modifier leur propre contenu. Mais je ne veux pas que mes auteurs ajoutent un "fournisseur" ou parcourent les entrées d'autres administrateurs.

J'ai examiné le code Wordpress et le codex: http://codex.wordpress.org/Function_Reference/register_post_type

il semble y avoir un paramètre dans register_post_type( 'supplier', $args ), que j'ai essayé de définir dans $ args comme suit, entre autres variables que je ne pense pas avoir besoin de lister ici car mon type de message fonctionne correctement:

     'capabilities'          => array( 'edit_others_posts' ),
     'map_meta_cap'          => true,

Je n'ai pas bien compris le paramètre "map_meta_cap" - en supposant que 'edit_others_posts' aurait suffi pour interdire l'accès aux "fournisseurs" à de simples auteurs (qui ne peuvent pas éditer les publications des autres). J'ai testé cela et ne fonctionne pas. Les auteurs peuvent toujours voir tout le contenu "fournisseurs" dans la zone d'administration et ajouter un fournisseur comme s'il s'agissait d'un article de blog.

Comment puis-je empêcher les auteurs (ou tout autre rôle d'utilisateur spécifique ou utilisateurs sans certaines fonctionnalités) d'accéder au contenu et de l'ajouter sous des types de publication personnalisés spécifiques que j'ai créés?

je vous remercie

1
unfulvio

Pour résoudre votre question, dans les arguments register_post_type, utilisez le paramètre capability_type, puis accordez les fonctionnalités spécifiques aux utilisateurs. Par exemple, si vous définissez 'capability_type' => 'supplier', n'accordez la fonctionnalité edit_supplier qu'à tous les administrateurs.

Plus de détails

capabilities prend un tableau des capacités au format 'edit_post' => 'edit_supplier'

Cela signifie en gros que partout où le code principal utilisait la capacité edit_post précédemment, il utilisera maintenant edit_supplier (vous devrez accorder la capacité edit_supplier à tous les utilisateurs, y compris les administrateurs, wordpress ne le fait pas pour vous).

si vous n'avez pas fourni le tableau de capacités et que map_meta_cap est vrai, alors wordpress générera le tableau de capacités par défaut à partir de la valeur capability_type fournie, comme ceci

[edit_post]      => "edit_{$capability_type}"
[read_post]      => "read_{$capability_type}"
[delete_post]        => "delete_{$capability_type}"
[edit_posts]         => "edit_{$capability_type}s"
[edit_others_posts]  => "edit_others_{$capability_type}s"
[publish_posts]      => "publish_{$capability_type}s"
[read_private_posts]     => "read_private_{$capability_type}s"
[delete_posts]           => "delete_{$capability_type}s"
[delete_private_posts]   => "delete_private_{$capability_type}s"
[delete_published_posts] => "delete_published_{$capability_type}s"
[delete_others_posts]    => "delete_others_{$capability_type}s"
[edit_private_posts]     => "edit_private_{$capability_type}s"
[edit_published_posts]   => "edit_published_{$capability_type}s"

{$capability_type} est la valeur que vous avez fournie. Si map_meta_cap est faux, wordpress ignorera complètement le paramètre capability_type (ou considérera qu'il s'agit de 'post' puis utilisera map_meta_cap)

4
Mridul Aggarwal