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