As mensagens exibidas no Dashboard do WordPress são denominadas Admin Notices ou notificações do administrador, do painel administrativo. Uma forma interessante de incrementar essa funcionalidade padrão do WordPress é exibir os erros ou avisos até que o usuário opte por não recebê-los mais.

Esse código faz parte da série de snippets “Erros no WordPress”. A proposta visa manipular e trabalhar com todos os tipos de erros no WordPress de modo organizado a fim de deixar o Tema e o Plugin em que se está trabalhando em perfeito funcionamento.

Usando a exibição das mensagens com o gancho admin_notices e o uso da classe is-dismissible, o usuário tem a possibilidade de fechar as mensagens exibidas. No entanto, caso nenhum tratamento seja feito essa mensagem tornará a aparecer caso qualquer página do Dashboard seja aberta em seguida.

Para resolver esse problema é preciso inserir uma ação via AJAX no momento em que o clique do botão fechar é feito. A verificação se o clique no botão fechar da mensagem foi ou não feito será controlado por uma opção (da tabela wp_options).

add_action( 'admin_notices', 'fn_notices' );
function fn_notices()
{
    ?>
    if ( !get_option( 'custom_dismiss' ) ) { ?>
    <div class="notice notice-warning is-dismissible" id="custom-dismiss">
        <p>A ação aconteceu, mas atenção com suas ações.</p>
    </div>
    <?php }
}

A mensagem apenas é exibida se a opção não existir. O id na tag HTML foi inserido para facilitar a identificação do elemento na chamada AJAX:

add_action( 'admin_print_footer_scripts', 'fn_notices_js', 11 );
function fn_notices_js()
{
    ?>
    <script type="text/javascript">
        jQuery(document).on( 'click', '#custom-dismiss .notice-dismiss', function() {
            jQuery.ajax({
                url: ajaxurl,
                data: {
                    action: 'custom_dismiss'
                }
            })
        })
    </script>
    <?php
}

Inserido o script no rodapé do Dashboard (após ter sido carregada a jQuery), basta criar um callback na chamada AJAX para criar a opção no banco de dados.

add_action( 'wp_ajax_custom_dismiss', 'fn_notices_dismiss' );
function fn_notices_dismiss()
{
    add_option( 'custom_dismiss', '1' );
}