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_initpar 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

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.