# Masquer la barre d’administration selon le rôle de l’utilisateur

> Un espace client avec la barre noire de WordPress en haut de l'écran, ça détonne. Un seul filtre suffit à la masquer pour les rôles concernés.

- Auteur : Clément Hadrot
- Publié le : 2021-08-13
- Mis à jour le : 2021-08-13
- Catégorie : Tips
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tips/masquer-barre-admin-par-role/

## L’essentiel

- show_admin_bar filtre l'affichage globalement
- Le test se fait sur le rôle de l'utilisateur connecté
- L'accès au profil doit rester possible autrement

Sur un espace membre où des clients d'une plateforme de formation se connectaient pour suivre leur progression, la barre noire d'administration en haut de chaque page cassait totalement l'illusion d'un espace dédié. Pire : elle exposait des liens vers l'administration WordPress à des utilisateurs qui n'avaient strictement aucune raison d'y accéder.

Le filtre `show_admin_bar()` — et son pendant filtrable `show_admin_bar` — permet de désactiver cette barre selon le rôle de l'utilisateur connecté, en une poignée de lignes, sans jamais toucher à ses capacités réelles ni casser l'accès à son profil.

## Le filtre show_admin_bar

WordPress expose un filtre du même nom que la fonction, qui reçoit un booléen et permet de le modifier selon le contexte. Il s'accroche généralement sur `init`, en vérifiant les rôles de l'utilisateur courant.

```
function plateforme_masquer_barre_admin() {
    $utilisateur = wp_get_current_user();
    $roles_sans_barre = array( 'abonne', 'client_formation' );

    if ( array_intersect( $roles_sans_barre, (array) $utilisateur->roles ) ) {
        show_admin_bar( false );
    }
}
add_action( 'init', 'plateforme_masquer_barre_admin' );
```

L'appel à `show_admin_bar( false )` à l'intérieur d'une fonction accrochée sur `init` est la méthode recommandée : appeler cette fonction plus tard, par exemple dans `wp_head`, ne fonctionne pas toujours car WordPress a déjà décidé d'afficher ou non la barre à ce stade.

## Ne pas confondre masquage et suppression de droits

Un piège classique consiste à croire que masquer la barre revient à retirer des capacités à l'utilisateur. Ce n'est pas le cas : `show_admin_bar( false )` agit uniquement sur l'affichage visuel côté front-end. Un utilisateur qui aurait, par erreur de configuration, la capacité `edit_posts` pourrait toujours accéder à `/wp-admin/` directement en tapant l'URL, barre masquée ou non.

- Le masquage de la barre est un confort d'affichage, pas une mesure de sécurité.
- La restriction d'accès à l'administration se gère séparément, via une redirection sur `admin_init` par exemple.
- Les deux mesures se complètent mais ne se remplacent pas l'une l'autre.

## Rediriger les rôles concernés hors de l'administration

> L'essentiel à retenir : show_admin_bar filtre l'affichage globalement ; Le test se fait sur le rôle de l'utilisateur connecté ; L'accès au profil doit rester possible autrement

Pour un espace membre où les abonnés n'ont légitimement rien à faire dans `/wp-admin/`, une redirection complète les complète utilement : elle évite qu'un utilisateur curieux ne tombe sur un tableau de bord vide et déroutant.

```
function plateforme_rediriger_hors_admin() {
    if ( ! is_admin() || wp_doing_ajax() ) {
        return;
    }
    $utilisateur = wp_get_current_user();
    if ( in_array( 'client_formation', (array) $utilisateur->roles, true ) ) {
        wp_safe_redirect( home_url( '/mon-compte/' ) );
        exit;
    }
}
add_action( 'admin_init', 'plateforme_rediriger_hors_admin' );
```

La vérification `wp_doing_ajax()` est indispensable : sans elle, toute requête AJAX émise depuis le front-end par ce même utilisateur (formulaire, panier, favoris) serait interceptée et redirigée par erreur, cassant des fonctionnalités qui n'ont rien à voir avec l'administration.

## Conserver un accès simple au profil

Une fois la barre masquée, l'utilisateur perd son accès habituel à « Modifier mon profil ». Il reste indispensable de proposer un lien équivalent ailleurs dans l'interface du site, généralement dans le tableau de bord de l'espace membre lui-même.

```
<a href="<?php echo esc_url( admin_url( 'profile.php' ) ); ?>">Modifier mon profil</a>
```

Cette page reste accessible même si l'administrateur a redirigé le reste de `/wp-admin/`, à condition d'exclure explicitement `profile.php` de la redirection ci-dessus, par exemple avec une vérification sur `$GLOBALS['pagenow']`.

> Sur les espaces membres, je préfère toujours créer une page « Mon compte » côté front-end plutôt que de renvoyer vers `profile.php` : l'expérience reste cohérente, et le client ne voit jamais la moindre trace de l'interface d'administration.

## En résumé

Le filtre `show_admin_bar`, combiné à un test sur les rôles de l'utilisateur, masque proprement la barre noire pour les profils qui n'en ont pas l'usage. Ce réglage reste purement visuel : sur un espace sensible, il doit être complété par une vraie redirection hors de l'administration et par un accès alternatif au profil, pensé côté front-end.
