Créer un nouveau rôle pour vos utilisateurs

WordPress intègre par défaut six rôles Administrateur, éditeur, Contributeur, auteur, abonné et un sixième rôle en multisite : super Admin.

Nous allons voir comment créer un nouveau rôle pour vos abonnés et comment afficher le contenu en fonction du nouveau rôle attribué.


À quoi peu nous servir de créer un nouveau rôle ?

Je pourrais vous donner pas mal de raison pour créer un nouveau rôle pour les abonnés ici dans le cadre de se tutoriel je voudrais conserver le rôle abonné par défaut et je voudrais créer un abonnement premium pour monétiser mon blog.


Pour créer ce nouveau rôle (abonnement premium) dans WordPress je vais ajouter le code suivant dans mon fichier function.php de mon thème :

// Ajuoter un rôle

add_role('premium_user', 'Abonnement Premium', array(

    'read' => true, // true : aurtorise la lecture des page et article 

    'edit_posts' => false, // false : Interdit d'ajouter des articles ou des pages 

    'delete_posts' => false, // false : Interdit de supprimer des articles ou des pages

));

Add_role : premium_user sera l’identifiant  de mon nouveau rôle et Abonnement Premium sera le nom du rôle que je vais attribuer à mes futurs abonnés qui voudront cet abonnement.


IMPORTANT : Dans l’identifiant et le nom du nouveau rôle vous ne devez pas avoir d’accents ni de caractères spéciaux au risque d’avoir un message d’erreur qui peut-être résolu quant intervenant sur la base de données.


Read : true ici j’autorise la lecture

Edit_post : false je n’autorise pas la possibilité d’ajouter un article

Delete_post : false je n’autorise pas la possibilité supprimer un article

Vous pouvez voir sur le codex les différentes permissions que vous pouvez attribuer.

Une fois que créer le nouveau rôle , il me faudrait  maintenant définir quel contenu qui va être affiché pour cet abonnement pour ça je vais créer une page template que je vais appelé Premium pour mon exemple :

<?php

/**

 * Template Name: Premium

 *

 * Ma page pour l'abonnement premium

 */

 get_header(); ?>

		<div id="container">

			<div id="content" role="main">

			</div><!-- #content -->

		</div><!-- #container -->

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Puis ont va ajouter la  fonction  current_user avec l’identifiant du nouveau  rôle  premium_user et  celui de l’administrateur administrator qui va permettre d’autoriser seulement les utilisateurs qui ont l’abonnement premium et l’administrateur à pouvoir accéder au contenu de cette page :

           
 <?php  global $current_user;

 if ($current_user->roles[0] == 'premium_user' || $current_user->roles[0] == 'administrator' ) {

   echo 'je suis en Abonnement Premium';

  // le contenu a affiché pour les membres premium

 } else {

      echo 'je suis pas en Abonnement Premium'; 

       }?>

Pour supprimer un rôle dans WordPress il vous suffit d’ajouter la ligne suivante dans votre fichier function.php de votre thème en indiquant son identifiant :

remove_role( 'author' );
0 0 votes
Évaluation de l'article
S’abonner
Notifier de
guest
21 Commentaires
le plus ancien
le plus récent le plus populaire
Inline Feedbacks
View all comments
Céline
Céline
8 années il y a

Pour l’ajout de rôle on peut aussi ce basé sur un rôle existant et lui ajouter des capacités.


function nouveau_role_abonne_premium() {
//Copier du Rôle ABONNE et des Capacités
/*
Dans le cas de l'abonné il a qu'une capacité définit 'read' voir <a href="http://codex.wordpress.org/Roles_and_Capabilities" rel="nofollow ugc">http://codex.wordpress.org/Roles_and_Capabilities</a>
Rôle par défaut de wordpress : 'administrator' 'editor' 'author' 'contributor' 'subscriber'
*/
$abonne_role = get_role('subscriber');
$caps_abonne_role = $abonne_role-&gt;capabilities;

//Ajouter les Capacitées au nouveau Rôle &quot;Abonnement Premium&quot;
add_role('premium_user', 'Abonnement Premium', $caps_abonne_role);

//Modifier le nouveau Rôle &quot;Abonnement Premium&quot;
$abonne_premium_role = get_role('premium_user');

//Enlever des Capacitées
// $abonne_premium_role -&gt; remove_cap('CAPACITE_SUPPRIMER');

//Ajouter des Capacitées
// $abonne_premium_role -&gt; add_cap('CAPACITE_AJOUTER');
}
add_action('init','nouveau_role_abonne_premium');

Pour ma part ce qui me pose problème c’est lorsque l’on créer un Custom Post Type avec des capacités spécifiques me permettant d’attribuer uniquement ces capacités à un nouveau rôle. (Le rôle à accès comme un auteur a l’édition de poste mais n’a pas accès à l’édition d’articles voir code ci-dessous).


function nouveau_role_membre() {
//Copier du Rôle AUTEUR et des Capacités
$auteur_role = get_role('author');
$caps_auteur_role = $auteur_role-&amp;gt;capabilities;

//Ajouter les Capacités au nouveau Rôle &quot;Membre&quot; (identifiant unique, nom d'affichage &amp;amp; ces droits)
add_role('auteur_membre', 'Membre', $caps_auteur_role);

//Modifier le nouveau Rôle &quot;Membre&quot;
$auteur_membre_role = get_role('membre_hem');

//Enlever des Capacités
$auteur_membre_role =&gt; remove_cap('edit_published_posts');
$auteur_membre_role =&gt; remove_cap('publish_posts');
$auteur_membre_role =&gt; remove_cap('delete_published_posts');
$auteur_membre_role =&gt; remove_cap('edit_posts');
$auteur_membre_role =&gt; remove_cap('delete_posts');
//On conserve la capacité de 'upload_files', 'read'

//Ajouter des Capacités pour l'exemple le custom post type permet la publication des recettes
$auteur_membre_role =&gt; add_cap('edit_published_recettes');
$auteur_membre_role =&gt; add_cap('publish_recettes');
$auteur_membre_role =&gt; add_cap('delete_published_recettes');
$auteur_membre_role =&gt; add_cap('edit_recettes');
$auteur_membre_role =&gt; add_cap('delete_recettes');
}
add_action('init','nouveau_role_membre');

Mais là où je n’arrive pas à donner ces capacités nativement c’est pour les rôles ‘administrator’ ‘editor’ ‘author’ ‘contributor’ avec les mêmes droits qu’un article. J’ai lu de la doc sur le filtre map_meta_cap peut être une solution mais je bloque dessus.

Peut-être avez-vous une piste à me suggérer.

Céline
Céline
8 années il y a

Le problème c’est que ce nouveau rôle ne doit pas avoir accès aux articles.

jules
jules
8 années il y a

Bonjour, tout d’abord je tiens à vous remercier pour ce tuto qui m’a été très bénéfique. Cependant pour m’en servir pleinement j’aimerais que lors de l’inscription au site, selon des éléments à choisir l’utilisateur est un role spécifique. Savez comment je peux faire? Si un plugin pouvait m’aider?

Merci de votre réponse.

jules
jules
Reply to  Fred
8 années il y a

Super ! Merci beaucoup c’est exactement ce dont j’avais besoin !!

onto
onto
8 années il y a

Hello, merci pour ce partage ! J’ai juste une question. J’ai créé un custom post type pour des produits et un autre pour des utilisateurs.

J’ai changé d’avis en me disant qu’utiliser le rôle abonné de wordpress m’avancerai car je n’aurais plus à créer le custom post utilisateur.

Tout ca pour dire que ton post tombe à point mais comment faire pour aficher une page prope à chaque membre qu’il peut consulter et pas seulement un template accessible que par eux. Une sorte de mini espace membre ou j’affiche leurs profil (en front ) .

Je ne sais pas si j’ai été clair.

merci en tout cas

onto
onto
Reply to  Fred
8 années il y a

Merci fred !

franck
franck
7 années il y a

BOnjour, j’utilise Ajax Event Calendar. Mais je n’arrive pas à permettre à un utilisateur de se créer ses propres évènements. Quand je vais dans progfil des utilisateurs et que je mets calenders. rien à faire ca ne fonctionne pas ça m’emmène sur un autre lien qui n’a rien à voir avec la création d’un évènement.
Merci

Charly
Charly
7 années il y a

Bonjour Franck,

je souhaite créer un rôle avec un accès restreint au backend qui se limiterait à la consultation du profil et à la consultation des données contenues dans le plugin ‘Flamingo’. Crois-tu que cela sois possible ?
Aurais-tu une piste à me suggérer ?
J’ai essayé avec le plugin ‘User Role Editor’ mais cela ne semble pas fonctionner comme je le souhaite…
Merci par avance pour ta réponse

Shuta
6 années il y a

Bonjour,
Merci pour ce tuto facile à appréhender avec un léger niveau.

Seulement j’ai un petit soucis, j’ai fait une petite erreur lors de la création d’un nouveau role et depuis il reste affiché dans la liste des roles présents alors qu’il n’est plus dans le functions.php
Merci de bien m’aider à trouver comment les supprimer, je n’arrive pas à les trouver :/ Même dans la BDD…

Bonne journée.

Shuta
Reply to  Fred
6 années il y a

Merci beaucoup !!!!
Ca me sauve que d’avoir 2 fois le même rôle sans savoir lequel est quoi >.<

Merci d'avoir répondu vite aussi !
Bonne journée !

Shuta
Reply to  Fred
6 années il y a

Une petite question supplémentaire, j’ai suivit pour créer un post type, mais pour associer un role juste a ce post type et pas un autre. C’est a dire qu’il puisse publier que ce type là et pas avoir accès a la publications des posts normaux. Et qu’il puisse gérer les commentaires de ce même type de post avec.

Actuellement mon code est ainsi :

function stream_type() {
$args = array(
'label' =&gt; __('Stream'),
'singular_label' =&gt; __('Stream'),
'public' =&gt; true,
'_edit_link' =&gt; 'post.php?post=%d',
'capability_type' =&gt; 'post',
'map_meta_cap' =&gt; true, // &lt;&#8212;&#8212; ont autorise l'attribution des capacités
'publicly_queryable' =&gt; true,
'show_ui' =&gt; true,
'show_in_menu' =&gt; true,
'query_var' =&gt; true,
'rewrite' =&gt; array( 'slug' =&gt; 'stream' ),
'has_archive' =&gt; true,
'hierarchical' =&gt; false,
'menu_position' =&gt; null,
'supports' =&gt; array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'stream' , $args );
register_taxonomy_for_object_type('genres', 'stream');

if ( !get_role('stream_user') ){
global $wp_roles;
if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles();
//$caps = $wp_roles-&gt;get_role('author')-&gt;capabilities; // &lt;&#8212;&#8212; on lui attribu les capacité du role éditeur
$caps = array_merge( $caps, array( 'edit_stream' =&gt; true, 'publish_stream' =&gt; true ) ); // &lt;&#8212;&#8212; on autorise les capacité du role Chef recettes
$wp_roles-&gt;add_role( 'stream_user', 'Streamer', $caps );
}
}
add_action('init', 'stream_type');

Shuta
Reply to  Shuta
5 années il y a

Salut !

Je revenais pour le même problème depuis le temps.
Je n’ai pas eu de problèmes vraiment jusque maintenant, mais ce qui m’embête c’est que les “Streamers” peuvent acceder aussi aux messages normaux =<

j'ai séparé en 2 posts :

function stream_type() {
$args = array(
'label' => __('Streams'),
'singular_label' => __('Stream'),
'public' => true,
'_edit_link' => 'post.php?post=%d',
'capability_type' => 'post',
'map_meta_cap' => true, // true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'stream' ),
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),
'menu_icon' => 'dashicons-video-alt3',
);
register_post_type( 'stream' , $args );
register_taxonomy_for_object_type('genres', 'stream');
}

et

add_role('stream_user', 'Streamer', array(
'delete_posts' => true,
'delete_published_posts' => true,
'edit_posts' => true,
'edit_published_posts' => true,
'publish_posts' => true,
'read' => true,
'upload_files' => true,
'delete_pages' => true,
'delete_published_pages' => true,
'edit_pages' => true, // true : aurtorise la lecture des page et article
'edit_published_pages' => true,
));

Merci de bien vouloir m’aider.
Bonne journée.

Shuta
Reply to  Fred
6 années il y a

Petit up ? >.<

Vic
Vic
1 année il y a

Bonjour,
Merci pour ces éléments.
Je voulais savoir s’il était possible de créer un rôle avec un droit spécifique.
Ce droit et de pouvoir créer/modifier/supprimer seulement certaines pages. Ces pages spécifiques pourrait être catégorisé d’une certaine manière si besoin