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

Pour afficher un message dans le tableau de bord WordPress, que ce soit un message d'information, d'avertissement de succès ou d'erreur, la meilleure technique consiste à utiliser le hook admin_notices.

Le message sera alors affiché en haut de la page du tableau de bord, sous le titre <h1>, lors du rechargement de la page.

Dans le cas où la page ne contiendrait aucun titre <h1> (ce qui n'est pas souhaitable), le message serait affiché tout en haut de la page.

▼Publicité

La fonction de rappel associée à ce hook devra afficher le code HTML du message. Ce code HTML sera en fait le texte du message entouré d'une balise <div> dont la classe est notice. À l'intérieur de cette division, on ajoutera également des marques de paragraphes.

De plus, pour ajouter une bande de couleur indiquant le niveau du message, on ajoutera une des classes 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

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

PHP

/**

 * Affiche un message de remerciement pour l'installation de l'extension.

 *

 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_merci_installation' );

 *

 * @author Christiane Lagacé

 *

 */

function monprefixe_message_merci_installation() {

    echo '<div class="notice notice-info is-dismissable"><p>';

    _e("Merci d'avoir installé l'extension XYZ !", "mon-domaine-de-localisation");

    echo '</p></div>';

}

 

add_action( 'admin_notices', 'monprefixe_message_merci_installation' );

Dans cet exemple, 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 et sur seulement certaines pages, la fonction de rappel devra se charger de vérifier si les conditions sont remplies.

Message affiché seulement sur une page donnée

Par exemple, si on veut que le message ne soit affiché que sur la page qui liste les items de notre thème personnalisé ou de notre extension, on doit vérifier que le nom de la page présentement affichée soit "admin.php". Pour cela, on utilisera la variable globale $pagenow

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 dans add_submenu_page().

Ex :

PHP

/**

 * Affiche un message indiquant que l'item a été ajouté avec succès, seulement sur la page qui liste les items.

 *

 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

 *

 * @author Christiane Lagacé

 *

 */

function monprefixe_message_ajout_item_reussi() {

 

    global $pagenow;

 

    if ( $pagenow == 'admin.php' && $_GET['page'] == 'monprefixe_gestion' ) {

 

        echo '<div class="notice notice-success is-dismissable"><p>';

        _e("L'item a été ajouté avec succès !", "mon-domaine-de-localisation")

        echo '</p></div>';

 

    }

}

 

add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

Message affiché seulement si une variable de session existe

Une autre approche consiste à ne pas tenir compte de la page présentement affichée mais plutôt de la présence ou non d'une variable de session, et de sa valeur.

Mais tout d'abord, il faudra activer les variables de session puisque par défaut, WordPress ne le fait pas.

Ex :

PHP

/**

 * Active les variables de session.

 *

 * Utilisation : add_action( 'init', 'monprefixe_session_start', 1 );

 *

 * @author Christiane Lagacé

 *

 */

function monprefixe_session_start() {

   if ( ! session_id() ) {

      @session_start();

   }

}

 

add_action( 'init', 'monprefixe_session_start', 1 );

 

/**

 * Affiche un message indiquant que l'item a été ajouté avec succès, seulement si la variable de session existe.

 *

 * Utilisation : add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

 *

 * @author Christiane Lagacé

 *

 */

function monprefixe_message_ajout_item_reussi() {

    if ( isset( $_SESSION['monprefixe_ajout_reussi'] ) && $_SESSION['monprefixe_ajout_reussi'] == true ) {

 

        echo '<div class="notice notice-success is-dismissable"><p>';

        _e("L'item a été ajouté avec succès !", "mon-domaine-de-localisation")

        echo '</p></div>';

 

        // supprime la variable de session pour ne pas que le message soit affiché à nouveau

        $_SESSION['monprefixe_ajout_reussi'] = null;

 

    }

}

 

add_action( 'admin_notices', 'monprefixe_message_ajout_item_reussi' );

Message affiché n'importe où dans la page

Si vous rencontrez un cas où le message n'a pas besoin d'être affiché en haut de la page, ou qu'il doit être affiché sur-le-champs sans qu'il n'y ait un rechargement de la page, il est possible de faire un echo qui affiche une division contenant un message tout en utilisant les classes notice-*.

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, comme par exemple au moment où les données à afficher sont lues dans la base de données.

Ex :

WordPress (PHP)

$requete = "...";

$resultat = $wpdb->get_results( $requete );

$erreur_sql = $wpdb->last_error;

 

if ( $erreur_sql == "" ) {

    if ( $wpdb->num_rows > 0 ) {

        // afficher les données tirées du SELECT

        // ...

    } else {

        echo '<div class="notice notice-warning"><p>';

        _e( "Il n'y a présentement aucun ... dans le système.", "mon-domaine-de-localisation" );

        echo '</p></div>';

    }

} else {

    echo '<div class="notice notice-error"><p>';

    _e( "Oups ! Un problème a été rencontré.", "mon-domaine-de-localisation" );

    echo '</p></div>';

 

    // loguer l'erreur si on est en mode débogage

    monprefixe_log_me( $erreur_sql );

}

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/

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories