Comme vu précédemment [ICI], il est possible de créer des utilisateur avec des rôles d’éditeurs personnalisés. Enlever ou ajouter des droits spécifiques à chaque « éditeur personnalisé ».
1 – Créer d’abord un rôle sans aucun droit
Dans fonctions.php :
function perso_role(){ $new_role = 'perso_editor'; $display_name = 'Editeur personnalisé'; add_role( $new_role, $display_name, array() ); } add_action( 'init', 'perso_role', 10);
2 – Ajouter les droits à cocher pour chaque éditeur personnalisé
Voir ici la page wordpress qui explique à quoi correspondent ces droits : [ICI]
Dans fonctions.php :
function user_roles( $user ){ $admin_roles = get_role( 'administrator' )->capabilities; $length = count($admin_roles); $column1 = (int) $length / 3; $column2 = $column1*2; $i = 0; ?> <table class ="form-table" id="table_roles" name="table_roles"> <tr> <th><label for="roles"><?php _e("Roles d'utilisateur (Editeur personnalisé) "); ?></label></th> <!--<td>--> <?php foreach($admin_roles as $key => $value){ if($i === 0){ echo("<td>"); }else{ if($i === $column1 || $i === $column2){ echo("</td><td>"); } } ?> <input style = "width: auto;" type="checkbox" name="customs_roles[]" id="<?php echo($key); ?>" value ="<?php echo($key); ?>" <?php if($value){ ?> checked = "checked" <?php } ?> /> <?php echo(str_replace("_", " ", $key) . "<br /> <br/>"); ?> <?php $i++; } echo("</td>"); ?> </tr> </table> <?php }
3 – Enregistrer l’éditeur personnalisé sur la base de données
Dans fonctions.php :
function perso_editor_registration( $user_id ) { $user_meta=get_userdata($user_id); $user_roles=$user_meta->roles; if(!in_array("perso_editor" , $user_roles)){ return; } $perso_role = get_role( 'perso_editor' ); if (isset($_POST['customs_roles']) && !empty($_POST['customs_roles'])) { foreach($_POST['customs_roles'] as $role){ $perso_role->add_cap($role, true); } } } add_action( 'user_register', 'perso_editor_registration', 10, 1 );
4 – Pour permettre les modifications sur l’éditeur personnalisé
Dans fonctions.php :
function user_perso_roles( $user ){ $user_roles = $user->roles; if(! in_array('perso_editor', $user_roles)){ return; } $user_roles = get_role( 'perso_editor' )->capabilities; $admin_roles = get_role( 'administrator' )->capabilities; $length = count($admin_roles); $column1 = (int) $length / 3; $column2 = $column1*2; $i = 0; ?> <table class ="form-table" id="table_roles" name="table_roles"> <tr> <th><label for="roles"><?php _e("Roles d'utilisateur (Editeur personnalisé) "); ?></label></th> <!--<td>--> <?php foreach($admin_roles as $key => $value){ if($i === 0){ echo("<td>"); }else{ if($i === $column1 || $i === $column2){ echo("</td><td>"); } } ?> <input style = "width: auto;" type="checkbox" name="customs_roles[]" id="<?php echo($key); ?>" value ="<?php echo($key); ?>" <?php if($user_roles[$key]){ ?> checked = "checked" <?php } ?> /> <?php echo(str_replace("_", " ", $key) . "<br /> <br/>"); ?> <?php $i++; } echo("</td>"); ?> </tr> </table> <?php } add_action('edit_user_profile', 'user_perso_roles');
5 – Enregistrer les modifications dans la base de données
Dans fonctions.php :
function perso_editor_update($user_id) { $user_meta=get_userdata($user_id); $user_roles=$user_meta->roles; if(!in_array("perso_editor" , $user_roles)){ return; } $admin_roles = get_role( 'administrator' )->capabilities; $role = get_role( 'perso_editor' ); if(isset($_POST['customs_roles'])) { foreach($admin_roles as $key => $value){ if(in_array($key, $_POST['customs_roles'])){ $role->add_cap($key, true); }else{ $role->remove_cap($key,true); } } } } add_action('edit_user_profile_update', 'perso_editor_update');
Récapitulatif
Copier la totalité du code sur le fichier functions.php
// Création utilisateur personnalisé // Création du rôle (sans droit) function perso_role(){ $new_role = 'perso_editor'; $display_name = 'Editeur personnalisé'; add_role( $new_role, $display_name, array() ); } add_action( 'init', 'perso_role', 10); // Ajouter les droits à cocher function user_roles( $user ){ $admin_roles = get_role( 'administrator' )->capabilities; $length = count($admin_roles); $column1 = (int) $length / 3; $column2 = $column1*2; $i = 0; ?> <table class ="form-table" id="table_roles" name="table_roles"> <tr> <th><label for="roles"><?php _e("Roles d'utilisateur (Editeur personnalisé) "); ?></label></th> <!--<td>--> <?php foreach($admin_roles as $key => $value){ if($i === 0){ echo("<td>"); }else{ if($i === $column1 || $i === $column2){ echo("</td><td>"); } } ?> <input style = "width: auto;" type="checkbox" name="customs_roles[]" id="<?php echo($key); ?>" value ="<?php echo($key); ?>" <?php if($value){ ?> checked = "checked" <?php } ?> /> <?php echo(str_replace("_", " ", $key) . "<br /> <br/>"); ?> <?php $i++; } echo("</td>"); ?> </tr> </table> <?php } // enregistrement de l'éditeur sur la BDD function perso_editor_registration( $user_id ) { $user_meta=get_userdata($user_id); $user_roles=$user_meta->roles; if(!in_array("perso_editor" , $user_roles)){ return; } $perso_role = get_role( 'perso_editor' ); if (isset($_POST['customs_roles']) && !empty($_POST['customs_roles'])) { foreach($_POST['customs_roles'] as $role){ $perso_role->add_cap($role, true); } } } add_action( 'user_register', 'perso_editor_registration', 10, 1 ); // Permettre les modification sur le rôle function user_perso_roles( $user ){ $user_roles = $user->roles; if(! in_array('perso_editor', $user_roles)){ return; } $user_roles = get_role( 'perso_editor' )->capabilities; $admin_roles = get_role( 'administrator' )->capabilities; $length = count($admin_roles); $column1 = (int) $length / 3; $column2 = $column1*2; $i = 0; ?> <table class ="form-table" id="table_roles" name="table_roles"> <tr> <th><label for="roles"><?php _e("Roles d'utilisateur (Editeur personnalisé) "); ?></label></th> <!--<td>--> <?php foreach($admin_roles as $key => $value){ if($i === 0){ echo("<td>"); }else{ if($i === $column1 || $i === $column2){ echo("</td><td>"); } } ?> <input style = "width: auto;" type="checkbox" name="customs_roles[]" id="<?php echo($key); ?>" value ="<?php echo($key); ?>" <?php if($user_roles[$key]){ ?> checked = "checked" <?php } ?> /> <?php echo(str_replace("_", " ", $key) . "<br /> <br/>"); ?> <?php $i++; } echo("</td>"); ?> </tr> </table> <?php } add_action('edit_user_profile', 'user_perso_roles'); // Enregistre les modifications sur la BDD function perso_editor_update($user_id) { $user_meta=get_userdata($user_id); $user_roles=$user_meta->roles; if(!in_array("perso_editor" , $user_roles)){ return; } $admin_roles = get_role( 'administrator' )->capabilities; $role = get_role( 'perso_editor' ); if(isset($_POST['customs_roles'])) { foreach($admin_roles as $key => $value){ if(in_array($key, $_POST['customs_roles'])){ $role->add_cap($key, true); }else{ $role->remove_cap($key,true); } } } } add_action('edit_user_profile_update', 'perso_editor_update');