web-dev-qa-db-fra.com

Comment arrêter d'afficher la notification de l'administrateur après avoir cliqué sur le bouton de fermeture

Tout d’abord, je sais comment ajouter un avis d’administration dans le menu admin de wordpress. Et j'ai ajouté un avis d'administrateur comme celui-ci:

<?php
add_action( 'admin_notices', function() {
    ?>
    <div class="notice notice-success is-dismissible">
        <p><?php _e( 'Imagine something here!', 'sample-text-domain' ); ?></p>
    </div>
    <?php
});

Maintenant, mon code fonctionne correctement, avec juste un problème.

Vous voyez maintenant que cette notification commence à apparaître dès que l'utilisateur active le plugin. et il reste en haut jusqu'à ce que l'utilisateur clique sur le bouton de fermeture.

Désormais, lorsque l'utilisateur clique sur une autre page d'administration, la notification réapparaît.

Ce que je veux:

Je souhaite que cet avis s'affiche pour tous ceux qui installent le plug-in pour la première fois ou qui sont mis à jour vers la dernière version de mon plug-in.

Mais une fois que l'utilisateur clique sur le bouton de fermeture, il ne sera plus jamais affiché, quelle que soit la page affichée.

J'ai fait une recherche sur Google à ce sujet, mais je n'ai trouvé aucune réponse utile. J'espère que vous pourrez m'aider ici.

3
iSaumya

Deux façons de gérer cela.

une. Joindre une minuterie à la notification:

Vous pouvez joindre une minuterie de 3 secondes (ou la durée souhaitée) à l’avis, comme suit:

<?php
set_transient( "my-plugin", "alive", 3 );
add_action( 'admin_notices', function() {
    if ( "alive" == get_transient( "my-plugin" ) {
        ?>
        <div class="notice notice-success is-dismissible">
            <p><?php _e( 'Imagine something here!', 'sample-text-domain' ); ?></p>
        </div>
        <?php
        delete_transient( "my-plugin" );
    }
});

Au bout de 3 secondes, le transitoire expire et les futurs appels à la fonction raccroché admin_notices ne pourront pas afficher la notification. Devrait être suffisant pour permettre à la notification d’afficher sur la première page après la fin de l’installation de votre plugin. Vous pouvez jouer avec la minuterie, au besoin.

b. Conservez un historique du rejet de la notification, avec votre propre action en révocation:

function my_plugin_notice() {
    $user_id = get_current_user_id();
    if ( !get_user_meta( $user_id, 'my_plugin_notice_dismissed' ) ) 
        echo '<div class="notice"><p>' . _e( 'Imagine something here!', 'sample-text-domain' ) . '</p><a href="?my-plugin-dismissed">Dismiss</a></div>';
}
add_action( 'admin_notices', 'my_plugin_notice' );

function my_plugin_notice_dismissed() {
    $user_id = get_current_user_id();
    if ( isset( $_GET['my-plugin-dismissed'] ) )
        add_user_meta( $user_id, 'my_plugin_notice_dismissed', 'true', true );
}
add_action( 'admin_init', 'my_plugin_notice_dismissed' );

Une fois licencié, la méta de l'utilisateur est mise à jour avec cette information, et la fonction raccordée admin_notices le vérifiera et affichera le message si ce n'est pas vrai.

6
C C