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
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.
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"
où {$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
)