Tout savoir sur WordPress
Tutoriel WordPress

Modifier le “Salutations” (Howdy) dans la barre admin

Ce tutoriel est une démontration complète et détaillée pour modifier/ajouter/supprimer/s’amuser avec le petit encart “Salutations” dans l’admin bar.

Ce tutoriel est une démontration complète et détaillée pour modifier/ajouter/supprimer/s’amuser avec le petit encart “Salutations” dans l’admin bar. Je vous donne ici plus de 12 idées de modification de ce fameux “Howdy” !

Commençons avec un code de base qui supprimer complètement la salutation et le pseudo :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

function good_bye_howdy( $wp_admin_bar ) {
	
    global $current_user;
    $my_account=$wp_admin_bar->get_node('my-account');
    $howdy = sprintf( __('Howdy, %1$s'), $current_user->display_name );
    $title = str_replace( $howdy, '', $my_account->title );
    $wp_admin_bar->add_node( array(
	'id' => 'my-account',
	'title' => $title,
	'meta' => $my_account->meta
    ) );
}
add_filter( 'admin_bar_menu', 'good_bye_howdy' );

[/pastacode]
Sur la ligne 6, nous allons modifier le contenu de remplacement pour y ajouter des informations utiles.

Je ne parlerais donc pas de supprimer le contenu car le code ci-dessus aussi, disons que c’est le point #0

#1 Laisser que le nom de l’utilisateur

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

$title = str_replace( $howdy, $current_user->display_name, $my_account->title );

[/pastacode]
On commence léger, je remplace juste par le nom d’affichage – display_name –  de l’utilisateur courant qui se trouve dans $current_user.

#2 Ajouter le rôle à côté du nom

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


if( in_array( $current_user->user_login, get_super_admins() ) ) :
    $my_role = __( 'Super-admin' );
else : 
    $my_role = translate_user_role( $GLOBALS['wp_roles']->role_names[$current_user->roles[0]] );
endif;
$howdy = sprintf( __( 'Howdy, %1$s' ), $current_user->display_name );
$title = str_replace( $howdy, sprintf( '%1$s (%2$s)', $current_user->display_name, $my_role ), $my_account->title );

[/pastacode]

Ici j’utilise la varable globale $wp_roles et je localise le nom de ce rôle dans la langue courante avec translate_user_role(). J’utilise aussi sprintf pour afficher les informations formatées.

Edit du 28/03/12: Attention, j’ai repris aussi la ligne $howdy = et ajouté la possibilité que le rôle de l’utilisateur soir un “Super admin” dans un multisite, merci à PILOOZ (voir commentaires) pour son test.

#3 Ajouter l’adresse e-mail

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$title = str_replace( $howdy, sprintf( '%1$s (%2$s)', $current_user->display_name, $current_user->user_email, $my_account->title );

[/pastacode]
Même chose qu’en #1, pas de grande découverte, j’utilise encore sprintf() pour remplacer les valeurs de formatage – %1$s – par mes variables dans $current_user.

#4 Afficher une phrase sympatique selon l’heure de la journée

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


switch( $time = (int)gmdate( 'H', time() ) ) :
    case ( $time == 12 && $time == 20 ) : $time = __( 'Bon appétit', 'montheme' ); break;
    case ( $time >= 7 && $time <= 17 ) : $time = __( 'Bonjour', 'montheme' ); break;
    case ( $time >= 18 && $time <= 23 ) : $time = __( 'Bonsoir', 'montheme' ); break;
    default : $time = __( 'Bonne nuit', 'montheme' ); break;
endswitch;
$title = str_replace( $howdy, sprintf( __( '%1$s %2$s !', 'montheme' ), $time, $current_user->display_name ), $my_account->title );

[/pastacode]

Ici je joue avec un switch() qui me permet de déclarer une variable – $time – selon l’heure de la journée.
Vous lirez donc que si il est entre 12h et 13h ou entre 20h et 21h je dis “Bon appétit”, entre 7h et 18h je dis “Bonjour”, entre 19h et minuit je dis “Bonsoir” et toutes les autres horaires qui n’entrent pas en jeu – de 01h à 07h – je dis “Bonne nuit”, cela entre dans le default.
Aussi remarquez que j’utilise le contexte montheme pour que vous puissiez traduire ces phrases dans votre fichier .pot du thème.

#5 Afficher le nombre d’articles créés

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$title = str_replace( $howdy, sprintf( __( '%1$s (%2$s article(s))', 'montheme' ), $current_user->display_name, count_user_posts( $current_user->ID ), $my_account->title );

[/pastacode]
Ici j’utilise la fonction WordPress count_user_posts() qui renvoie le nombre d’articles de cet utilisateur, simple non ?

#6 Afficher le nombre d’articles créés ce jour

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$comment_count = $GLOBALS['wpdb']->get_var( 
     'SELECT COUNT(comment_ID) FROM ' . $GLOBALS['wpdb']->posts . ' 
      WHERE post_date LIKE "' . date( 'Y-m-d' ) . '%" 
           AND post_status="publish" AND post_type="post" 
           AND post_author=' . $current_user->ID 
);
$title = str_replace( $howdy, sprintf( __( '%1$s (%2$s article(s) post&eacute;s ce jour)', 'montheme' ), $current_user->display_name, $comment_count ), $my_account->title );

[/pastacode]
Même chose mais seulement pour la journée en cours : dommage qu’aucun hook ne permette d’ajouter un “where” dans la requête de count_user_posts(), je suis obligé de faire ma propre requête …

#7 Afficher le nombre de commentaires postés

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$comment_count = $GLOBALS['wpdb']->get_var( 
     'SELECT COUNT(comment_ID) FROM ' . $GLOBALS['wpdb']->comments. ' 
      WHERE comment_approved = 1 
            AND user_ID = ' . $current_user->ID 
);
$title = str_replace( $howdy, sprintf( __( '%1$s (%2$s commentaire(s))', 'montheme' ), $current_user->display_name, $comment_count ), $my_account->title );

[/pastacode]
Dans WordPress, pas moyen de connaitre le nombre de commentaires postés, il est donc obligatoire de faire une requête préalable. Si on pousse un peu plus loin, il serait bien de mettre cette valeur en cache et si on va encore plus loin, de créer une user_meta qui stocke ce nombre et ne se mets à jour que lorsqu’un commentaire est supprimé ou ajouté. Mais ceci est une autre histoire ;)

#8 Afficher le nombre de commentaires à modérer

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$title = str_replace( $howdy, sprintf( __( '%1$s (%2$s commentaire(s) en attente)', 'montheme' ), $current_user->display_name, wp_count_comments()->moderated ), $my_account->title );

[/pastacode]
Ici au contraire, WordPress permet de connaitre le nombre de commentaires triés par status, je fais donc appel à wp_count_comments() et j’affiche les commentaires à modérer avec moderated.

#9 Afficher le nombre de plugins à mettre à jour

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$update_data = wp_get_update_data();
$title = str_replace( $howdy, sprintf( __( '%1$s (%2$s plugin(s) &agrave; mettre &agrave; jour)', 'montheme' ), $current_user->display_name, $update_data['counts']['plugins'] ), $my_account->title );

[/pastacode]
J’utilise la fonction wp_get_update_data() qui contient les informations de mises à jour des plugins mais aussi du core. J’affiche simplement le compteur des plugins avec $update_data['counts']['plugins'].

#10 Afficher un Bon anniversaire !

Ici il faudra au préalable avoir ajouté des champs personnalisés dans le profil des membres, je prends donc l’exemple où la personne doit entrer sa date de naissance.
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

$bonnefete = get_user_meta( $current_user->ID, 'date_naissance', true ) == gmdate( 'd/m/Y' ) ? __( 'Bon anniversaire' ) : '';
$title = str_replace( $howdy, sprintf( __( '%1$s %2$s', 'montheme' ), $bonnefete, $current_user->display_name ), $my_account->title );

[/pastacode]
Je lis le champ perso date_naissance et le compare à la date GMT actuelle avec gmdate(), si elle correspondent, alors on lui souhaite son anniversaire !

#11 Afficher le nombre de jours lui restant à vivre #fun

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

$title = str_replace( $howdy, sprintf( __( '%1$s, il vous reste %2$s jours à vivre ...', 'montheme' ), $current_user->display_name, rand( 2, 365 ) ), $my_account->title );

[/pastacode]
Ce calcul savant est correct  à 1 jour prêt … ;)

#12 Afficher la date et l’heure (c’était super à la mode en 1995)

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


$title = str_replace( $howdy, sprintf( __( '[%1$s] %2$s', 'montheme' ), date_i18n( get_option( 'date_format') . ' ' . get_option( 'time_format' ), gmdate( 'U' ) ), $current_user->display_name ), $my_account->title );

[/pastacode]
Avec date_i18n() il vous est possible de localiser l’affichage de la date, ici je vais même utiliser les réglages du blog, faut bien que ça serve ! Je vais donc piocher avec get_option() dans date_format et time_format que vous pouvez modifier simplement sur la page des réglages généraux de votre blog.

#13 Amusez-vous !

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

$title = str_replace( $howdy, __( 'Votre compte<p>' ) . $current_user->display_name . ' ', $my_account->title );

[/pastacode]
J’avoue, je crée un <p> et je ne le ferme pas … bouuuh ! Juste pour la forme alors :) On peut créer des décalages, ajouter des images tout est permis.

J’attends vos idées, avis, commentaires afin d’améliorer encore ce tutoriel ! Merci d’avoir lu jusqu’en bas

Cet article a été mis à jour il y a 4412 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

28 Commentaires

  1. Bonjour Julio,
    Merci ppour tout vos tricks & tips WordPress très clairs, que je me suis empressé d’essayer ;)

    Pour l’exemple #2, cela ne semble pas fonctionner en multi-site pour les utilisateurs qui sont super admin de la plateforme. Je vous propose la modification suivante :

    function bienvenue($wp_admin_bar){
    	global $current_user;
    	$my_account=$wp_admin_bar->get_node('my-account');
    	$my_role = translate_user_role( $GLOBALS['wp_roles']->role_names[$current_user->roles[0]]);
    	if ($my_role == "") $my_role = 'Super-admin';
    	
    	$howdy = sprintf( __('Howdy, %1$s'), $current_user->display_name );
    	$title = str_replace( $howdy, sprintf( '%1$s (%2$s)', $current_user->display_name, $my_role ), $my_account->title );
    	$wp_admin_bar->add_node( array('id' => 'my-account', 'title' => $title) );
    }
    

    Qu’en dites-vous ?

  2. Mince j’ai oublié de mettre une explication du code. La voici :
    en fait $current_user->roles[0] est nul pour un utilisateur “super-admin, qui n’aurait pas de rôle sur le blog consulté.
    L’attribut super-admin est géré différemment.
    J’imagine qu’il s’agit d’une verrue due à la fusion de WP avec WPMU ? Peut-être que dans les versions à venir cela va changer ?

  3. Code non testé :

    function bienvenue( $wp_admin_bar )
    {
    	global $current_user;
    	$my_account = $wp_admin_bar->get_node( 'my-account' );
    	if( in_array( $current_user->user_login, get_super_admins() ) ) :
    		  $my_role = __( 'Super-admin' );
    	else: $my_role = translate_user_role( $GLOBALS['wp_roles']->role_names[$current_user->roles[0]] );
    	endif;
    	$howdy = sprintf( __( 'Howdy, %1$s' ), $current_user->display_name );
    	$title = str_replace( $howdy, sprintf( '%1$s (%2$s)', $current_user->display_name, $my_role ), $my_account->title );
    	$wp_admin_bar->add_node( array( 'id' => 'my-account', 'title' => $title ) );
    }
    add_filter( 'admin_bar_menu', 'bienvenue' );
    

    Je préfère vérifier que l’utilisateur fait bien partie des super admin et non pas juste vérifier un role vide.
    Aussi, j’ajoute la traduction de “Super admin” ;)

    Merci pour l’info, si tu peux tester ça et que ça fonctionne, je mets à jour le code.

  4. Extra, ton code fonctionne à merveille. effectivement, c’est mieux de traduire, et de vérifier explicitement que l’utilisateur est bien super-admin.

  5. Merci pour le tuto c un tres bon tuto
    je voudrais savoir svp la page à ajouter c lignes de code et en plus j’aimerais remplaber la barrre de buddypress par une une bar comme celle de facebook auriez vs des conseil a m passer
    Merci

  6. Bonjour

    Toutes les astuces que tu trouves sur tous les sites sont (logiquement) à mettre dans le fichier “functions.php” de ton thème.

    See you

  7. Merci pour votre aide
    j voudrai savoir si c possible comment vous avez fait pour metre la bar de recherche et se connecter et inscription dans le bas de la pager merci

  8. @Mondoha Maoulida : C’est un thème personnalisé, il n’y a pas de fonction ou de hook WP qui permet de faire directement cela.

  9. Meri JONATHAN BUTTIGIEG je croyais que c était un plugin ou une petite fonction en tout cas merci beaucoup et j essayerai de jongler un petit peut avec un thème enfant bonne suite

  10. Bonjour,
    Je débute et je voudrais savoir quel fichier doit être modifier svp. En gros ou changer le code, car je ne parviens pas a le trouver dans mon ftp.
    Merci.

  11. @Alex : Il faut modifier le fichier functions.php qui est présent à la racine de votre thème.

  12. Bonjour,

    Même en allant sur l fonction.php, je ne trouve pas ce code :

    function good_bye_howdy( $wp_admin_bar ) {
        global $current_user;
        $my_account=$wp_admin_bar->get_node('my-account');
        $howdy = sprintf( __('Howdy, %1$s'), $current_user->display_name );
        $title = str_replace( $howdy, '', $my_account->title );
        $wp_admin_bar->add_node( array(
        'id' => 'my-account',
        'title' => $title,
        'meta' => $my_account->meta
        ) );
    }
    add_filter( 'admin_bar_menu', 'good_bye_howdy' );
    

    J’ai chercher encore et encore j’ai fais foncton.php du thème et celui de wordpress mais rien…

    Ma version est la 3.5.1

    Merci d’avance, si vous m’aidez ^^

  13. @Noks: Hum, je ne comprends pas. Ce code n’est pas ajouté par défaut, c’est à vous de le faire ;)

  14. Bonjour,Je bloque sur “montheme” comment interpreter ?
    j’utilise le contexte montheme pour que vous puissiez traduire ces phrases dans votre fichier .pot du thème.
    Merci pour votre réponse

  15. bonjour,
    Ce post date un peu mais il m’a bien aidé. Ceci dit je cherche à rajouter une petite information à côté du nom.
    Ex : Romain (Payment status : Validated)

    Ou le ‘payment statut’ fait référence à une entré dans un formulaire “formidable” (Yes or No).
    Un truc du genre :
    if($form_id == 13)
    if ( $_POST[‘item_meta’][371] == ‘Yes’ ) {
    echo ‘Payment status : Validated’

    Est-ce faisable avec un tout petit bout de code?

    Merci d’avance

  16. Bonjour, merci pour ce magnifique code. Je l’ai mis sur mon site
    Je voulais modifier les liens du user-info et edit-profile mais je ne sais pas comment on fait.
    Vous pouvez m’aider?
    Cordialement Nicolas.

  17. C’est bon, j’ai compris comment ca fonctionne et résolu le problème pour changer les href.
    $wp_admin_bar->add_node( array(
    ‘id’ => ‘user-info’,
    ‘href’ => (‘/forums/membre/’. $current_user->user_login),
    ) );

    $wp_admin_bar->add_node( array(
    ‘id’ => ‘edit-profile’,
    ‘href’ => (‘/forums/membre/’. $current_user->user_login .’/edit/’),
    ) );

  18. Bonjour, pour l’heure, j’ai un décalage horaire vu que je suis pas en GMT. Comment faire pour afficher la bonne heure? Est ce possible de faire avec le changement été hier automatiquement.
    Sinon pourquoi pas utiliser l’heure de wordpress?

  19. Bon, c’est encore moi. Je viens de voir qu’il y a un problème avec bon appétit. Ce n’est pas de && mais || car on ne peut pas avoir 12 et 17 heure.
    Et le décalage, j’ai trouvé.

  20. Bonjour, très amusant ce tuto.
    Existe t il un code similaire pour ajouter le nom de l’utilisateur connecté dans la barre supérieure du site à droite.
    A gauche j’ai la date qui apparait.

    D’aance merci pour votre aide
    Cordialement

    Thierry