web-dev-qa-db-ja.com

閉じるボタンをクリックした後に管理者への通知を表示しないようにする方法

まず第一に私はwordpressの管理メニューに管理通知を追加する方法を知っています。そして私はこのような管理通知を追加しました:

<?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
});

今、私のコードは1つ問題があるだけで、うまく滑らかに動作しています。

あなたは今この通知がユーザーがプラグインを起動するとすぐに現れ始めます。そしてユーザーが閉じるボタンをクリックするまでそれはトップのままです。

ユーザーが他の管理ページをクリックすると、通知が再び表示されます。

私が欲しいもの:

私はこの通知がプラグインをはじめてインストールするか、または私のプラグインの最新版に更新されているすべての人に現れることを望みます。

しかし、ユーザーが閉じるボタンをクリックすると、ユーザーがどのページに移動しても、それは二度と表示されません。

私はそれについてグーグル検索をしましたが、どんな有用な答えも見つけられませんでした、私はあなたがここで私を手伝うことができると思います。

3
iSaumya

これを処理する2つの方法.

a。通知にタイマーを付けます:

次のように、通知に3秒のタイマーを付けることができます(または、長い時間がありますが)。

<?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" );
    }
});

3秒後にトランジェントが期限切れになり、今後のadmin_noticesフック関数への呼び出しでは通知が表示されません。プラグインのインストールが完了した後に最初のページの更新に通知が表示されるようにするのに十分な時間が必要です。必要に応じて、あなたはタイマーで遊ぶことができます。

b。通知を却下した履歴を、あなた自身の却下措置と共に保管してください:

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' );

却下されると、ユーザーmetaはその情報で更新され、admin_noticesフック関数はこれをチェックし、trueでない場合にのみメッセージを表示します。

6
C C