Sur un site collaboratif géré par quatre rédacteurs et deux administrateurs, une notice d’avertissement affichée via admin_notices pour signaler une extension à mettre à jour réapparaissait obstinément à chaque connexion de chaque utilisateur, y compris pour ceux qui n’avaient strictement aucun moyen d’agir dessus. Le bouton de fermeture natif proposé par WordPress, la petite croix en haut à droite, ne fait en réalité que masquer visuellement la notice côté navigateur : au rechargement suivant, elle revient, identique.
Pour qu’une notice se ferme réellement, et individuellement pour chaque compte plutôt que pour tout le monde à la fois, il faut la coupler à une meta utilisateur mise à jour via un petit appel AJAX au moment du clic.
Afficher la notice conditionnellement
function nb_afficher_notice_maj_extension() {
$user_id = get_current_user_id();
if ( get_user_meta( $user_id, 'nb_notice_maj_fermee', true ) ) {
return;
}
?>
<div class="notice notice-warning is-dismissible" data-notice="maj-extension">
<p>Une mise à jour importante de l'extension de facturation est disponible. Pensez à planifier son installation.</p>
</div>
<?php
}
add_action( 'admin_notices', 'nb_afficher_notice_maj_extension' );
L’attribut data-notice permet d’identifier précisément quelle notice a été fermée, utile dès qu’un site en affiche plusieurs de ce type simultanément.

Capter le clic de fermeture en JavaScript
jQuery( function( $ ) {
$( document ).on( 'click', '.notice[data-notice="maj-extension"] .notice-dismiss', function() {
$.post( ajaxurl, {
action: 'nb_fermer_notice',
nonce: nbNoticeVars.nonce
} );
} );
} );
WordPress ajoute automatiquement le bouton de fermeture et son comportement visuel dès que la classe is-dismissible est présente sur la notice ; il suffit ici d’écouter ce clic pour déclencher l’appel supplémentaire vers le serveur.
Enregistrer et sécuriser l’appel AJAX
function nb_enregistrer_script_notice() {
wp_enqueue_script( 'nb-notice-fermeture', get_stylesheet_directory_uri() . '/assets/js/notice-fermeture.js', array( 'jquery' ), '1.0', true );
wp_localize_script( 'nb-notice-fermeture', 'nbNoticeVars', array(
'nonce' => wp_create_nonce( 'nb_fermer_notice_action' ),
) );
}
add_action( 'admin_enqueue_scripts', 'nb_enregistrer_script_notice' );
function nb_traiter_fermeture_notice() {
check_ajax_referer( 'nb_fermer_notice_action', 'nonce' );
update_user_meta( get_current_user_id(), 'nb_notice_maj_fermee', 1 );
wp_die(); // termine proprement la requête AJAX
}
add_action( 'wp_ajax_nb_fermer_notice', 'nb_traiter_fermeture_notice' );
La vérification check_ajax_referer() protège l’appel contre une soumission forgée depuis un autre site, tout en s’appuyant sur le mécanisme de nonce déjà standard dans l’écosystème WordPress.
Prévoir une réinitialisation après la mise à jour réelle
Une fois l’extension effectivement mise à jour, il ne faut pas oublier de nettoyer cette meta pour tous les utilisateurs, sous peine de laisser une trace inutile en base de données indéfiniment :
function nb_reinitialiser_notice_apres_maj() {
global $wpdb;
$wpdb->delete( $wpdb->usermeta, array( 'meta_key' => 'nb_notice_maj_fermee' ) );
}
Cette fonction se déclenche manuellement une fois la mise à jour effectuée, ou automatiquement si l’on souhaite comparer la version installée de l’extension avec une version de référence stockée en option.
Ce que cette technique ne remplace pas
- Le hook
admin_noticeslui-même, avec ses règles générales d’affichage conditionnel selon l’écran ou le rôle, reste un sujet plus large déjà traité séparément. - Cette approche par utilisateur ne convient pas à une notice qui doit disparaître définitivement pour tout le site une fois une condition technique résolue : dans ce cas, une simple option globale suffit, sans avoir besoin de cibler chaque compte.
En résumé
Coupler une notice is-dismissible à une meta utilisateur mise à jour par un appel AJAX minimal permet une fermeture réellement individuelle et définitive, contrairement au comportement purement visuel proposé nativement par WordPress. Cette nuance, souvent négligée, évite bien des notices qui reviennent en boucle malgré des clics répétés.