J'ai créé un type de publication personnalisé et deux ou trois rôles d'utilisateur personnalisés. Je souhaite pouvoir restreindre l'affichage du type de publication en fonction de rôles spécifiques.
Existe-t-il un moyen simple de limiter cela?
Chaque rôle a des capacités.
Voici un simple contributeur à notre entreprise: (il écrit et édite)
add_role('contributor', 'Contributor', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
));
Maintenant, il a une nouvelle capacité (il peut éditer des posts d'autres peuples)
function add_capability()
{
$role = get_role('contributor');
$role->add_cap('edit_others_posts');
}
add_action('admin_init', 'add_capability');
Maintenant, ajoutons ses nouvelles fonctionnalités pour notre nouveau type de publication. Commençons par créer le type de message:
function create_myposttype()
{
register_post_type(
'myposttype',
array(
'public' => true,
'capability_type' => 'myposttype',
'capabilities' => array(
'publish_posts' => 'publish_myposttypes',
'edit_posts' => 'edit_myposttypes',
'edit_others_posts' => 'edit_others_myposttypes',
'read_private_posts' => 'read_private_myposttypes',
'edit_post' => 'edit_myposttype',
'delete_post' => 'delete_myposttype',
'read_post' => 'read_myposttype',
),
)
);
}
add_action('init', 'create_myposttype');
Le type de publication est créé mais le contributeur n'a aucun pouvoir dessus. Permet de lui donner un peu de jus:
function add_capability()
{
$role = get_role('contributor');
$role->add_cap('read_myposttype');
$role->add_cap('edit_myposttypes');
$role->add_cap('delete_myposttype', false); // to be sure
}
add_action('admin_init', 'add_capability');
Les fonctions read_post et read_ * garantissent que l'utilisateur ayant le rôle attribué ne pourra pas voir et accéder à cette zone actuelle. Il obtiendra cette erreur générique Wordpress:
Vous ne disposez pas des autorisations suffisantes pour accéder à cette page
Et faisons en sorte que nos auteurs (ce rôle par défaut) ne puissent pas voir le myposttype posts:
function remove_author_capability()
{
$role = get_role('author');
$role->add_cap('read_myposttype', false);
}
add_action('admin_init', 'remove_author_capability');
N'oubliez pas de nettoyer:
function add_roles_on_activation() // add roles on activation
{
add_role('contributor', 'Contributor', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
));
}
register_activation_hook(__FILE__, 'add_roles_on_activation');
function add_roles_removal() // we clean up after ourselves
{
remove_role('contributor');
}
register_deactivatin_hook(__FILE__, 'add_roles_removal');
Maintenant, si vous voulez juste supprimer des éléments du menu (en les rendant accessibles par URL de toute façon), voici comment:
À partir de la barre d’administration (ce petit menu en survol):
function my_edit_adminbar($wp_admin_bar)
{
if(current_user_can('read_myposttype'))
$wp_admin_bar->remove_node('new-myposttype');
}
add_action('admin_bar_menu', 'my_edit_adminbar');
Au menu:
function my_edit_menu()
{
if(current_user_can('read_myposttype'))
{
$slug = 'edit.php?post_type=myposttype';
remove_menu_page($slug);
}
}
add_action('admin_menu', 'my_edit_menu');
Tout d’abord, voici comment nous pouvons obtenir le rôle d’utilisateur actuel.
<?php
// Get the current user id
$user_id = get_current_user_id();
// Get the user data based on this id
// returned in an arryay
$user_data = new WP_User( $user_id );
// We could echo out the first role item
// in the array like this...
echo $user->roles[0];
// Or we could print the full
// array like this
print_r($user->roles);
?>
Nous pouvons maintenant utiliser les données ci-dessus pour construire une instruction if simple dans les modèles. Cela dépendra de ce que vous essayez d’atteindre mais ...
<?php
$user_roll = $user->roles[0];
if($user_roll =="administrator") {
// Code here will only be run if current
// user is an admin
}
?>
Vous en avez le blues;)
Bien .. Je ne vois pas de code ... donc je ne sais pas si vous avez créé le type de message personnalisé vous-même ou utilisé un plugin. Je suppose que vous avez créé le type de publication personnalisé dans functions.php. Vous pouvez y avoir une instruction if pour vérifier si l'utilisateur dispose de certaines fonctionnalités.
<?php current_user_can( $capability, $args ); ?>
Cela aiderait vraiment si vous pouviez poster du code, afin que je puisse donner un exemple spécifique sur la façon de procéder.
http://codex.wordpress.org/Function_Reference/current_user_can