logo

Créer des Utilisateurs avec des droits personnalisés sous WordPress [functions + PHP]

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