
Une nouveauté de WP 3.1 : la barre d'admin, bonne ou mauvaise initiative ?
(article mis à jour vendredi 11 mars 2011)
Mise à jour importante de WordPress vers 3.1. Attention avant d’effectuer cette mise à jour si vous utilisez un vieux thème.
Vous pouvez gérer dans votre profil et pour chaque utilisateur la présence ou absence de cette barre. Mais dans certains cas, la nouvelle barre d’administration imposée par WP 3.1 pose problème. Par exemple si vous désirez la désactiver totalement pour tout le monde, ou si votre blog est privé et que vous voulez empêcher l’accès au tableau de bord. La parade se fait en deux temps :
Supprimer la barre d’administration
Voir le tutoriel complet chez Yoast ici. Pour supprimer la barre pour tout le monde, ajoutez ceci dans functions.php:
//************************************************************ //* Disable the Admin Bar WP 3.1 or also use css #wpadminbar // disable the WordPress Admin Bar for everyone //***********************************************************// add_filter( 'show_admin_bar', '__return_false' ); function yoast_hide_admin_bar_settings() { ?> <style type="text/css"> .show-admin-bar { display: none; } </style> <?php } function yoast_disable_admin_bar() { add_filter( 'show_admin_bar', '__return_false' ); add_action( 'admin_print_scripts-profile.php', 'yoast_hide_admin_bar_settings' ); } add_action( 'init', 'yoast_disable_admin_bar' , 9 );
Interdire l’accès à vos membres vers wp-admin, le tableau de bord
Ajouter ceci dans le fichier functions.php :
function xyz_prevent_admin_access() { if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false && !current_user_can('Administrator')) { wp_redirect(get_option('siteurl')); } } add_action('init', 'prevent_admin_access', 0);
Le cas précis que j’ai rencontré où cette barre pose problème, c’est tous les cas où on a créé un thème qui justement interdit tout accès au tableau de bord. C’est le cas des blogs privés ou des blogs qui permettent des accès différents selon le rôle des utilisateurs.
J’ai créé un tel thème pour un de mes clients : un blog privé dont les accès et donc le menu est différent selon le rôle du membre. Cette barre d’administration vient contredire tout ce que j’avais codé, alors même que j’avais justement créé une telle barre d’admin, différente selon le rôle.
Ici WP 3.1 ne tient pas compte de ces différents rôles et vient banaliser un code existant.
Afficher la barre uniquement pour le ou les administrateurs
Solution moins radicale, n’autoriser la barre que pour les aministrateurs.
function my_function_admin_bar(){ return false; } add_filter( 'show_admin_bar' , 'my_function_admin_bar'); function my_function_admin_bar($content) { return ( current_user_can("administrator") ) ? $content : false; } add_filter( 'show_admin_bar' , 'my_function_admin_bar');
Solution avec Plugins
Pour ceux qui détestent plonger les mains dans le cambouis de la programmation, des plugins utiles ont vu le jour:
Je n’ai pas testé ces plugins car j’ai plutôt mis en place la solution hack wp.
Désactiver la barre de Buddypress
Ajouter dans le fichier wp-config.php :
define( 'BP_DISABLE_ADMIN_BAR', true );
Sources et Ressources
Des articles utiles pour gérer cette nouvelle barre :
- Admin Bar Plugin Roundup (Webblogtools)
- Disable Admin Bar and Hide Preferences (DevelopperMind)
- How to remove WordPress 3.1 admin bar (WPRecipes)
- Désactiver la nouvelle barre d’administration de WordPress 3.1 (28033)
- How to disable the WordPress Admin Bar (Yoast)
- How to Disable the BuddyPress Admin / Buddy Bar (WPMU.org)
A suivre…
remplacer
function xyz_prevent_admin_access() {
if (strpos(strtolower($_SERVER[‘REQUEST_URI’]), ‘/wp-admin’) !== false && !current_user_can(‘Administrator’)) {
wp_redirect(get_option(‘siteurl’));
}
}
par
function prevent_admin_access() {
if (strpos(strtolower($_SERVER[‘REQUEST_URI’]), ‘/wp-admin’) !== false && !current_user_can(‘administrator’)) {
wp_redirect(get_option(‘siteurl’));
}
}
cela marche mieux
Merci pour l’astuce 🙂
Pour interdire l’accès à l’admin par les non administrateurs, autant mettre « admin_init » en hook, plutôt que checker l’url avec « init » en hook.
De plus il faut éventuellement prendre en compte l’exception de l’utilisation de l’ajax dans wordpress qui utilise l’admin, par la vérification supplémentaire » !defined( ‘DOING_AJAX’ ) » avant la redirection
merci pour l’article.
J’aurais une question : cette barre fait un décalage des colonnes centrales vers le bas de la hauteur de la barre quand elle est affichée. Comment faire pour ne pas avoir ce décalage de 28 pixels lorsqu’elle est affichée ?
Bonne journée !
Juste supprimer la barre dans ton profil d’utilisateur. Sinon il faut modifier le thème, ce qui est tout de même embêtant
merci pour la réponse.
J’ai réussi comme ça :
body,body.wp-admin{padding-top:4px!important;}
(dans buddybar.css)