Dans WordPress 4.2 la classe is-dismissible
a été introduite pour permettre le rejet des notifications.
Ce code fonctionne pour ajouter la notification.
function prefix_deprecated_hook_admin_notice() {
if ( has_filter( 'prefix_filter' ) ) { ?>
<div class="updated notice is-dismissible">
<p><?php _e( 'Notice', 'my-text-domain' ); ?></p>
</div>
<?php }
}
add_action( 'admin_notices', 'prefix_deprecated_hook_admin_notice' );
Je suis en mesure de rejeter l'avis, mais je ne sais pas comment je peux sauver l'État lorsque l'avis est rejeté avec AJAX.
La meilleure solution que j'ai trouvée était une petite bibliothèque. https://github.com/CalderaWP/dismissible_notice
Il est rétrocompatible jusqu'à WordPress 3.8.
Il n'y a pas besoin d'une bibliothèque, c'est assez simple à accomplir. Si vous codez votre propre plugin (ce qui semble être le cas), vous pouvez le faire de manière assez légère:
Une version légèrement modifiée de l'avis, qui vérifie si elle a été rejetée avant son affichage, et stocke le "type" d'avis dans la balise pour un accès en javascript:
function prefix_deprecated_hook_admin_notice() {
if ( has_filter( 'prefix_filter' ) ) {
// Check if it's been dismissed...
if ( ! get_option('dismissed-prefix_deprecated', FALSE ) ) {
// Added the class "notice-my-class" so jQuery pick it up and pass via AJAX,
// and added "data-notice" attribute in order to track multiple / different notices
// multiple dismissible notice states ?>
<div class="updated notice notice-my-class is-dismissible" data-notice="prefix_deprecated">
<p><?php _e( 'Notice', 'my-text-domain' ); ?></p>
</div>
<?php }
}
}
add_action( 'admin_notices', 'prefix_deprecated_hook_admin_notice' );
Et puis, le jQuery suivant
// shorthand no-conflict safe document-ready function
jQuery(function($) {
// Hook into the "notice-my-class" class we added to the notice, so
// Only listen to YOUR notices being dismissed
$( document ).on( 'click', '.notice-my-class .notice-dismiss', function () {
// Read the "data-notice" information to track which notice
// is being dismissed and send it via AJAX
var type = $( this ).closest( '.notice-my-class' ).data( 'notice' );
// Make an AJAX call
// Since WP 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
$.ajax( ajaxurl,
{
type: 'POST',
data: {
action: 'dismissed_notice_handler',
type: type,
}
} );
} );
});
En PHP, configurez les hooks AJAX pour capturer l'appel AJAX:
add_action( 'wp_ajax_dismissed_notice_handler', 'ajax_notice_handler' );
/**
* AJAX handler to store the state of dismissible notices.
*/
function ajax_notice_handler() {
// Pick up the notice "type" - passed via jQuery (the "data-notice" attribute on the notice)
$type = self::request( 'type' );
// Store it in the options table
update_option( 'dismissed-' . $type, TRUE );
}
Et c'est tout! Aucune bibliothèque nécessaire - surtout si vous avez déjà le chargement de fichiers PHP et javascript.
Cette méthode est conforme au Blog de l’équipe de développement de WordPress Core