Yes, I’m writing about the admin notices. I know some are already up to their ears with that and I’m on that boat. The admin area is – and should be – for the user. Any notices that appear need to be informational. Not a nag. With that being said, I know there are some that would like to promote or even encourage their users to leave a review. I’m for that but there is a time and a place.
The admin area isn’t one. Nor should it be.
I do think part of that is because there really is no proper function, or hook, for using those. [ There really should not be. ] But for the sake of experimentation I went and played around with a few things. This is what ensued:
The code
It is pretty quick and decently documented.
// because otherwise it will be a turd-nugget add_action( 'admin_init', 'check_for_notice_dismiss' ); function check_for_notice_dismiss() { // we check if the setting is set, making sure that it does not return false if ( get_theme_mod( 'theme-notice' ) === false ) { // we add our action for the notice add_action( 'admin_notices', 'we_add_our_notice' ); // super hackish only because there are some that aren't running 4.5 and // so they can't use wp_add_inline_script() add_action( 'admin_footer', 'our_jquery_action' ); add_action( 'wp_ajax_our_jquery_dismiss', 'our_jquery_dismiss' ); } } // callback for our admin notice function we_add_our_notice() { // checking for our theme screen because we can if ( get_current_screen()->id !== 'themes' ){ // get the message $string = __( 'How about you review our theme?', 'text-domain' ); $html = '<div id="my-theme-notice" class="notice is-dismissible notice-info"><p>%s</p></div>'; // the final outout of the notice printf( $html, $string ); } } // hackish job so we don't have to enqueue an extra file function our_jquery_action(){ ?> <script> jQuery( document ).on( 'click', '#my-theme-notice .notice-dismiss', function() { jQuery.ajax({ url: ajaxurl, data: { action: 'our_jquery_dismiss' } }) }) </script> <?php } // callback function for our AJAX function our_jquery_dismiss() { if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { set_theme_mod( 'theme-notice', true ); } die(); }
Really I only did test using a theme which does explain the use of get_theme_mod()
. There is potential in creating some standard function in adding a dismissible notice.
Something along the lines of:
function wp_add_notice( $message, $dismiss = true, $type = '' ) {}
Or even as a class:
class WP_Notice { var dismiss = true; var types = array( 'info', 'error', 'updated', 'saved' ); public function __construct( $message, $type, $dismiss ) { if ( !$message ) return; // the rest of the code } private function render_message( $message, $classes ) { printf( '<div class="%s"><p>%s</p></div>', esc_attr( $classes ), esc_html( $message ) ); } }
I do think the class would be better suited for that but that could just be me. There you have it! Possible ideas to iterate over.