Créer un nouveau rôle pour vos utilisateurs

Publié par Fred Le

Catégorie(s): Tutoriel Wordpress
 

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' );

Mots clés: ,




14 Commenataires pour :

“Créer un nouveau rôle pour vos utilisateurs”

  1. Céline dit :

    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 http://codex.wordpress.org/Roles_and_Capabilities
    	Rôle par défaut de wordpress : 'administrator' 'editor' 'author' 'contributor' 'subscriber'
    	*/
    	$abonne_role = get_role('subscriber');
    	$caps_abonne_role = $abonne_role->capabilities;
    	
    	//Ajouter les Capacitées au nouveau Rôle "Abonnement Premium"
    	add_role('premium_user', 'Abonnement Premium', $caps_abonne_role);
    	
    	//Modifier le nouveau Rôle "Abonnement Premium"
    	$abonne_premium_role = get_role('premium_user');
    	
    	//Enlever des Capacitées
    //	$abonne_premium_role -> remove_cap('CAPACITE_SUPPRIMER');
    	
    	//Ajouter des Capacitées
    //	$abonne_premium_role -> 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-&gt;capabilities;
    		
    		//Ajouter les Capacités au nouveau Rôle "Membre" (identifiant unique, nom d'affichage &amp; ces droits)
    		add_role('auteur_membre', 'Membre', $caps_auteur_role);
    		
    		//Modifier le nouveau Rôle "Membre"
    		$auteur_membre_role = get_role('membre_hem');
    		
    		//Enlever des Capacités
    		$auteur_membre_role => remove_cap('edit_published_posts');
    		$auteur_membre_role => remove_cap('publish_posts');
    		$auteur_membre_role => remove_cap('delete_published_posts');
    		$auteur_membre_role => remove_cap('edit_posts');
    		$auteur_membre_role => 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 => add_cap('edit_published_recettes');
    		$auteur_membre_role => add_cap('publish_recettes');
    		$auteur_membre_role => add_cap('delete_published_recettes');
    		$auteur_membre_role => add_cap('edit_recettes');
    		$auteur_membre_role => 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.

    • Fred Fred dit :

      Bonjour Céline,
      La solution effectivement ic’est d’ utiliser map_meta_cap , il faut le déclarer en true dans votre post type et ensuite modifier les capacités.

      Important si vous changer les capacités, il faut les remettre par défaut et ensuite en attribuer de nouvelles pour quelles soit prises en compte, car cela implique des modifications dans la base de données du blog.

      <?php
      function recettes_type() {
       $args = array(
       'label' => __('Recettes'),
       'singular_label' => __('Recettes'),
       'public' => true,
       '_edit_link' => 'post.php?post=%d',
       'capability_type' => 'post',
       'map_meta_cap' => true, // <------ ont autorise l'attribution des capacités 
       'supports' => array('title', 'editor', 'thumbnail') 
       );
       register_post_type( 'recettes' , $args ); 
       register_taxonomy_for_object_type('post_tag', 'recettes','show_tagcloud=1&hierarchical=true'); 
       
       
       
       // Création d'un nouveau rôle
       if ( !get_role('nouveau_role') )
      {
      	global $wp_roles;
      	if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles();
      	
      	$caps = $wp_roles->get_role('editor')->capabilities; // <------ on lui attribu les capacité du role éditeur
      	$caps = array_merge( $caps, array( 'edit_recettes' => true, 'publish_recettes' => true ) ); // <------ on autorise les capacité du role Chef recettes
      	$wp_roles->add_role( 'nouveau_role', 'Chef recettes', $caps );
      }
      }
      add_action('init', 'recettes_type');
      
      
      ?>
      
      
  2. Céline dit :

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

    • Fred Fred dit :

      Dans ce cas, vous pouvez restreindre le rôle de cette façon :

      # Ici on ajoute le role  #
      $edit_editor = get_role('editor');
      
      # Ici on donne les droits a l'éditeur #
      $edit_editor->add_cap('upload_files');
      
      # L'éditeur ne peu plus avoir acces a l'édition aux articles et catégories  #
      # http://codex.wordpress.org/Roles_and_Capabilities #
      $edit_editor->remove_cap('edit_others_posts');
      $edit_editor->remove_cap('manage_categories');
      
      

      Même si le nouveau rôle il est basé sur un rôle existant

  3. jules dit :

    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.

  4. onto dit :

    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

    • Fred Fred dit :

      Bonjour onto,
      Pour restreindre l’accès a une page template il suffi d’ajouter le code ci-dessous en remplaçant premium_role par le rôle que vous voulez, pour donner accès au contenu de la page.

      <?php
      // On verifie que l'utilisateur a bien le role premium
      if( !current_user_can( 'premium_role' ) ) {
      //  et si l'utilisateur na pas le rôle premium il est rediriger ver la page d'accueil
           wp_redirect( home_url() );
           die();
        }
        
      ?>
      
  5. franck dit :

    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

    • Fred Fred dit :

      Bonjour Franck,
      Je viens de tester le plugin Ajax Event Calendar sur wordpress 3.6 et il fonctionne bien cela peu venir d’un autres plugin essayer de les désactiver un par un et de tester Ajax Event Calendar.

  6. Charly dit :

    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

    • Fred Fred dit :

      Bonjour Charly,
      Pour créer un nouveau rôle tu dois ajouter le code (comme exemple) suivant et définir les permissions :

      add_role('nouveau_role', 'Nouveau role', array(
      	'edit_files' => false,
      	'edit_plugins' => false,
      	'edit_theme_options' => false,
      	'edit_themes' => false,
      	'install_plugins' => false,
      	'install_themes' => false,
      	'switch_themes' => false,
      	'update_plugins' => false,
      	'update_themes' => false,
      	'read' => false,
      	'edit_users' => false
      ));
      

      Pour les permissions : Codex WordPress

Laisser un commentaire

XHTML : Vous pouvez utiliser ces balises : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Pour affiché du code HTML, CSS, PHP, JAVASCRIPT utilisé le marqueur : [code][/code]