Formation PUB020 : WordPress, 2023 Les messages dans le tableau de bord WordPress

36.1 Afficher un message de la bonne façon dans le tableau de bord


Afin de respecter le style du tableau de bord, les message, que ce soit un message d'information, de succès, d'avertissement ou d'erreur, devront y être affichés à l'aide d'une des techniques présentées ici.

Classes CSS

L'apparence du message sera régi à l'aide de balises HTML et de classes CSS précises.

Le texte du message doit être placé dans une balise <div> dont la classe est notice. À l'intérieur de cette division, on ajoutera également des marques de paragraphes <p>.

De plus, pour ajouter une bande de couleur qui indique le niveau du message, on ajoutera une des classes CSS suivantes :

  • Pour un message d'information : notice-info (bande bleue)

    notice-info

  • Pour un message d'avertissement : notice-warning (bande orangée)

    notice-warning

  • Pour un message indiquant qu'une opération a été réussie : notice-success (bande verte)

    notice-success

  • Pour un message d'erreur : notice-error (bande rouge)

    notice-error

À ces classes, on peut ajouter la classe is-dismissible pour que le message d'erreur soit accompagné d'un X permettant de le faire disparaître.

is-dismissible

PHP

echo '<div class="notice notice-error"><p>';
_e( "Oups ! Un problème a été rencontré.", "mon-domaine-de-localisation" );
echo '</p></div>';

Message affiché sur-le-champ

Parfois, le message doit être affiché sur-le-champ, là où WordPress est rendu dans la construction de la page. À ce moment, il est possible de faire directement un echo pour afficher le message.

Notez qu'avec cette approche, il est tout de même possible que le message soit affiché en haut de la page. Ce sera le cas, par exemple, si le code qui génère le message est exécuté au début du chargement de la page.

Voici un exemple où un message d'erreur est affiché lorsque la fonction de rappel du hook after_switch_theme est appelée.

Fichier functions.php ou son sous-fichier tableau-de-bord-tables.php

dbDelta( $sql );
$erreur_sql = $wpdb->last_error;

if ('' != $erreur_sql) {
    echo '<div class="notice notice-error is-dismissible"><p>';
    _e( "Un problème a empêché la création des tables requises dans la base de données.", "mon-domaine-de-localisation" );
    echo '</p></div>';
}

Message affiché sans hook

Hook admin_notices

La plupart du temps, les messages affichés dans le tableau de bord utiliseront le hook admin_notices.

La fonction de rappel associée à ce hook devra afficher le code HTML du message.

Le hook admin_notices et sa fonction de rappel seront utilisés comme suit :

Fichier functions.php ou son sous-fichier tableau-de-bord-messages.php

/**
 * Affiche un message de remerciement pour l'installation de l'extension.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_merci_installation' );
 */
function monprefixe_message_merci_installation() {
    echo '<div class="notice notice-info is-dismissible"><p>';
    _e( "Merci d'avoir installé l'extension XYZ !", 'mon-domaine-de-localisation' );
    echo '</p></div>';
}
 
add_action( 'admin_notices', 'monprefixe_message_merci_installation' );

Mesage dans le haut du tableau de bord

Position du message 

Lors du chargement d'une page du tableau de bord, les messages configurés dans le hook admin_notices apparaîtront là où se trouve la balise <hr class="wp-header-end">, qui devrait normalement être définie dans le haut de la page.

PHP

<div class="wrap">
    <h1 class="wp-heading-inline"><?php echo $title; ?></h1>
    ...

    <hr class="wp-header-end">
    ...

</div>

En cas d'absence de cette balise, le message sera placé immédiatement sous le titre de contenu (défini avec <h1>, <h2>, ...), à condition que ce titre fasse partie de la division <div class="wrap">.

Dans le cas où la page ne contiendrait pas de balise <hr class="wp-header-end"> ni de balise de titre (ce qui n'est pas souhaitable), le message serait affiché tout en haut de la page.

Message affiché seulement si une variable de session existe

Dans l'exemple précédent, le message sera toujours affiché, sur toutes les pages du tableau de bord.

Dans le cas où le message doit être affiché seulement dans certaines conditions ou sur seulement certaines pages, la fonction de rappel devra se charger de vérifier si les conditions sont remplies, par exemple en utilisant des variables de session.

Pour travailler avec des variables de session, il faudra d'abord activer ce mécanisme puisque par défaut, WordPress ne le fait pas.

Ceci sera fait directement dans le fichier functions.php (et non dans un sous-fichier) ou encore, si vous êtes en train de développer une extension, dans un fichier de l'extension.

Fichier functions.php

/**
 * Active les variables de session.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'init', 'monprefixe_session_start', 1 );
 */
function monprefixe_session_start() {
   if ( ! session_id() ) {
      @session_start();
   }
}
 
add_action( 'init', 'monprefixe_session_start', 1 );

Ensuite, le code initialisera la variable de session lorsqu'une condition donnée est rencontrée. Ici, on souhaite affiche un message d'erreur lorsque la création d'une table a échoué. 

Fichier functions.php ou son sous-fichier tableau-de-bord-tables.php

dbDelta( $sql );
$erreur_sql = $wpdb->last_error;

if ('' != $erreur_sql) {
    $_SESSION['monprefixe_erreur_creation_table'] = true;
}

Finalement, la fonction de rappel du hook admin_notices affichera le message mais seulement si la variable de session existe.

Fichier functions.php ou son sous-fichier tableau-de-bord-messages.php

/**
 * Affiche un message indiquant que l'item a été ajouté avec succès, seulement si la variable de session existe.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );
 */
function monprefixe_message_ajout_item_reussi() {
    if ( isset( $_SESSION['monprefixe_erreur_creation_table'] ) && $_SESSION['monprefixe_erreur_creation_table'] == true ) {
 
        echo '<div class="notice notice-error is-dismissible"><p>';
        _e( "Un problème a empêché la création des tables requises dans la base de données.", "mon-domaine-de-localisation" );
        echo '</p></div>';
 
        // supprime la variable de session pour ne pas que le message soit affiché à nouveau
        $_SESSION['monprefixe_erreur_creation_table'] = null;
 
    }
}
 
add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

Ici, dû au moment où l'erreur est survenue, le résultat sera exactement le même que si on avait écrit le message d'erreur directement lorsque l'erreur a été rencontrée.

Message affiché sans hook

J'ai tenté d'illustrer ce processus comme suit :

Processus admin_notices

Message affiché seulement sur une page donnée

Il est possible d'affiche un message en tout temps mais seulement sur une page donnée, par exemple sur la page qui liste les items de notre thème personnalisé ou de notre extension.

Pour cela, on utilisera la variable globale $pagenow. pour s'assurer qu'on est sur la page admin.php.

On doit également vérifier la valeur du paramètre page dans l'URL. Ce paramètre correspond au slug utilisé dans add_menu_page() ou add_submenu_page().

Fichier functions.php ou son sous-fichier tableau-de-bord-messages.php

/**
 * Affiche un message indiquant que l'item a été ajouté avec succès, seulement sur la page qui liste les items.
 * @author Christiane Lagacé <christiane.lagace@hotmail.com>
 *
 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );
 */
function monprefixe_message_ajout_item_reussi() {
 
    global $pagenow;
 
    if ( $pagenow == 'admin.php' && $_GET['page'] == 'monprefixe_gestion' ) {
 
        echo '<div class="notice notice-info is-dismissible"><p>';
        _e( "Pour afficher cette liste côté site Web, veuillez utiliser le shortcode [monprefixelisteitems].", "mon-domaine-de-localisation" );
        echo '</p></div>';
 
    }
}
 
add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

Message sur page de gestion

Pour plus d'information

« Plugin API/Action Reference/admin notices ». Codex WordPress. https://codex.wordpress.org/Plugin_API/Action_Reference/admin_notices

« Complete Guide to WordPress Admin Notices ». Digging Into WordPress. https://digwp.com/2016/05/wordpress-admin-notices/

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre