/persist-admin-notices-dismissal

Simple plugin that persists dismissal of admin notices across pages in WordPress dashboard.

Primary LanguagePHP

Persist Admin notice Dismissals

Latest Stable Version Total Downloads

Simple framework library that persists the dismissal of admin notices across pages in WordPress dashboard.

Installation

Run composer require collizo4sky/persist-admin-notices-dismissal

Alternatively, clone or download this repo into the vendor/ folder in your plugin, and include/require the persist-admin-notices-dismissal.php file like so

require  __DIR__ . '/vendor/persist-admin-notices-dismissal/persist-admin-notices-dismissal.php';
add_action( 'admin_init', array( 'PAnD', 'init' ) );

or let Composer's autoloader do the work.

How to Use

Firstly, install and activate this library within a plugin.

Say you have the following markup as your admin notice,

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

To make it hidden forever when dismissed, add the following data attribute data-dismissible="disable-done-notice-forever" to the div markup like so:

function sample_admin_notice__success() {
	if ( ! PAnD::is_admin_notice_active( 'disable-done-notice-forever' ) ) {
		return;
	}
	
	?>
	<div data-dismissible="disable-done-notice-forever" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}
add_action( 'admin_init', array( 'PAnD', 'init' ) );
add_action( 'admin_notices', 'sample_admin_notice__success' );

Autoloaders

When using the framework with an autoloader you must also load the class outside of the admin_notices or network_admin_notices hooks. The reason is that these hooks come after the admin_enqueue_script hook that loads the javascript.

Just add the following in your main plugin file.

add_action( 'admin_init', array( 'PAnD', 'init' ) );

Usage Instructions and Examples

If you have two notices displayed when certain actions are triggered; firstly, choose a string to uniquely identify them, e.g. notice-one and notice-two

To make the first notice never appear once dismissed, its data-dismissible attribute will be data-dismissible="notice-one-forever" where notice-one is its unique identifier and forever is the dismissal time period.

To make the second notice only hidden for 2 days, its data-dismissible attribute will be data-dismissible="notice-two-2" where notice-two is its unique identifier and the 2, the number of days it will be hidden is the dismissal time period.

You must append the dismissal time period to the end of your unique identifier with a hyphen (-) and this value must be an integer. The only exception is the string forever.

To actually make the dismissed admin notice not to appear, use the is_admin_notice_active() function like so:

function sample_admin_notice__success1() {
	if ( ! PAnD::is_admin_notice_active( 'notice-one-forever' ) ) {
		return;
	}

	?>
	<div data-dismissible="notice-one-forever" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done 1!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}

function sample_admin_notice__success2() {
	if ( ! PAnD::is_admin_notice_active( 'notice-two-2' ) ) {
		return;
	}

	?>
	<div data-dismissible="notice-two-2" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done 2!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}

add_action( 'admin_init', array( 'PAnD', 'init' ) );
add_action( 'admin_notices', 'sample_admin_notice__success1' );
add_action( 'admin_notices', 'sample_admin_notice__success2' );

Cool beans. Isn't it?