web-dev-qa-db-fra.com

Comment sauvegarder l’avis de licenciement dans WP 4,2?

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.

6
grappler

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.

0
grappler

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

4
cale_b