Désactiver la barre d’administration de WP 3.1 et interdire l’accès au tableau de bord

par | 11 mars 2011 | n° 65 | Difficulté : indéfinie

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//************************************************************
//*  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 );
//************************************************************
//*  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 :

1
2
3
4
5
6
7
function xyz_prevent_admin_access() {
    if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false &amp;&amp; !current_user_can('Administrator')) {
        wp_redirect(get_option('siteurl'));
    }
}
 
add_action('init', 'prevent_admin_access', 0);
function xyz_prevent_admin_access() {
    if (strpos(strtolower($_SERVER['REQUEST_URI']), '/wp-admin') !== false &amp;&amp; !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.

1
2
3
4
5
6
7
8
9
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');
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 :

1
define( 'BP_DISABLE_ADMIN_BAR', true );
define( 'BP_DISABLE_ADMIN_BAR', true );

Sources et Ressources

Des articles utiles pour gérer cette nouvelle barre :

A suivre…

Tags: , , , ,

5 Réactions

  1. 25 septembre 2011
    à 16:06

    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 :)

  2. 7 juin 2012
    à 12:44

    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

  3. 6 août 2012
    à 10:21

    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 !

    • 6 août 2012
      à 14:31

      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

      • 6 août 2012
        à 15:13

        merci pour la réponse.
        J’ai réussi comme ça :
        body,body.wp-admin{padding-top:4px!important;} (dans buddybar.css)

Référé ailleurs (Trackbacks/Pingbacks)

  1. CFA MU » Blog Archive » Essai - [...] Lashon Langage WordPress : Désactiver la barre d’administration de WP 3.1 et interdire l’accès... 26 février 2011 Pour interdire ...
  2. L’Hebdo WordPress : WordPress 3.1 – HTML5 – Livre – Intégrateur développeur magento - [...] gênante. Si c’est votre cas, il est possible de la désactiver. Pour cela, selon les cas, suivez la méthode ...
  3. L’Hebdo WordPress : WordPress 3.1 – HTML5 – Livre | Choisir-son-CMS.tk - [...] comme gênante. Si c’est votre cas, il est possible de la désactiver. Pour cela, selon les cas, suivez la ...
  4. L’Hebdo WordPress : WordPress 3.1 – HTML5 – Livre - [...] gênante. Si c’est votre cas, il est possible de la désactiver. Pour cela, selon les cas, suivez la méthode ...

Réagir