do_action( ‘admin_notices’ )

Prints admin screen notices.

More Information

Example

In order to display a notice, echo a div with the class notice and one of the following classes:

* notice-error – will display the message with a white background and a red left border.
* notice-warning– will display the message with a white background and a yellow/orange left border.
* notice-success – will display the message with a white background and a green left border.
* notice-info – will display the message with a white background a blue left border.
* optionally use is-dismissible to add a closing icon to your message via JavaScript. Its behavior, however, applies only on the current screen. It will not prevent a message from re-appearing once the page re-loads, or another page is loaded.

Don’t use update-nag as a class name!
It is not suitable for regular admin notices, as it will apply different layout styling to the message. Additionally it will trigger the message to be moved above the page title (<h1>), thus semantically prioritizing it above other notices which is not likely to be appropriate in a plugin or theme context.

The inner content of the div is the message, and it’s a good idea to wrap the message in a paragraph tag <p> for the correct amount of padding in the output.

function sample_admin_notice__success() {
?>
<div class="notice notice-success is-dismissible">
<p><?php _e( 'Done!', 'sample-text-domain' ); ?></p>
</div>
<?php
}
add_action( 'admin_notices', 'sample_admin_notice__success' );
function sample_admin_notice__error() {
$class = 'notice notice-error';
$message = __( 'Irks! An error has occurred.', 'sample-text-domain' );

printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
}
add_action( 'admin_notices', 'sample_admin_notice__error' );

Source

do_action( 'admin_notices' );

Changelog

VersionDescription
3.1.0Introduced.

User Contributed Notes

  1. Skip to note 11 content

    Sample Usage

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

    The class notice-success will display the message with a white background and a green left border.

    function sample_admin_notice__error() {
    	$class = 'notice notice-error';
    	$message = __( 'Irks! An error has occurred.', 'sample-text-domain' );
    
    	printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) ); 
    }
    add_action( 'admin_notices', 'sample_admin_notice__error' );

    The class notice-error will display the message with a white background and a red left border.

    Use notice-warning for a yellow/orange, and notice-info for a blue left border.

    The class name is-dismissible will automatically trigger a closing icon to be added to your message via JavaScript. Its behavior, however, applies only on the current screen. It will not prevent a message from re-appearing once the page re-loads, or another page is loaded.

    [copied/pasted from https://codex.wordpress.org/Plugin_API/Action_Reference/admin_notices%5D

  2. Skip to note 12 content

    Method to display message dynamically (Taking example of warning message)

    /**
     * Class to log warnings.
     */
    class Log_Warning {
    	/**
    	 * Message to be displayed in a warning.
    	 *
    	 * @var string
    	 */
    	private string $message;
    
    	/**
    	 * Initialize class.
    	 *
    	 * @param string $message Message to be displayed in a warning.
    	 */
    	public function __construct( string $message ) {
    		$this->message = $message;
    
    		add_action( 'admin_notices', array( $this, 'render' ) );
    	}
    
    	/**
    	 * Displays warning on the admin screen.
    	 *
    	 * @return void
    	 */
    	public function render() {
    		printf( '<div class="notice notice-warning is-dismissible"><p>Warning: %s</p></div>', esc_html( $this->message ) );
    	}
    }

    Now you can simply initialize the class to display a dynamic message.

    new Log_Warning( 'Image should contain async tag' );
  3. Skip to note 13 content

    The Theme Review Team (TRT) released a package you can use in your theme or plugin to create admin notices:
    https://github.com/WPTRT/admin-notices

    Its primary purpose is for providing a standardized method of creating admin notices in a consistent manner using the default WordPress styles.

    Notices created using this method are automatically dismissible.

  4. Skip to note 14 content

    Information on the unofficial, voluntary flag 'DISABLE_NAG_NOTICES' is missing. Here are relevant details from the old codex page:

    Disable Nag Notices
    In late 2017, an unofficial defined constant was proposed by LittleBizzy as a voluntary way for plugin or theme authors to allow for hiding certain admin notices that may be considered bothersome by some webmasters. It can be used as follows:

    define('DISABLE_NAG_NOTICES', true);

    It should be noted that there is no universal support for this constant, although a limited number of plugin and theme authors have begun to support it. A typical use case might be for hiding recurring “nag” notices that ask users to review their extension on WordPress.org, etc. Furthermore, it should not have any effect on general notices that appear within WP Admin, and is simply a way for extensions to opt in to disabling certain notices at their own discretion.

    Usage sample:

    if ( ! defined( 'DISABLE_NAG_NOTICES' ) || ! DISABLE_NAG_NOTICES ) {
    	add_action( 'admin_notices', 'my_admin_notice_renderer' );
    }
  5. Skip to note 15 content

    In order to display a notice, echo a div with the class notice and one of the following classes:

    * notice-error – will display the message with a red left border.
    * notice-warning– will display the message with a yellow/orange left border.
    * notice-success – will display the message with a green left border.
    * notice-info – will display the message with a blue left border.
    * optionally use is-dismissible to add a closing icon to your message via JavaScript. Its behavior, however, applies only on the current screen. It will not prevent a message from re-appearing once the page re-loads, or another page is loaded.

    Don’t use update-nag as a class name! It is not suitable for regular admin notices, as it will apply different layout styling to the message. Additionally it will trigger the message to be moved above the page title, thus semantically prioritizing it above other notices which is not likely to be appropriate in a plugin or theme context.

    The inner content of the div is the message, and it’s a good idea to wrap the message in a paragraph tag for the correct amount of padding in the output.

  6. Skip to note 16 content

    Here’s a simple way to add an independence day notice to some admin pages.

    add_action( 'admin_notices', 'independence_notice' );
    
    function independence_notice() {
        global $pagenow;
    	$admin_pages = [ 'index.php', 'edit.php', 'plugins.php' ];
        if ( in_array( $pagenow, $admin_pages ) ) {
    		if ( date( 'j, F' ) === '1, October' ) { 
    			?>
    			<div class="notice notice-warning is-dismissible">
    				<p>Happy Independence Day, Nigeria...</p>
    			</div>
    			<?
    		}
        }
    }
  7. Skip to note 17 content
    //Display admin notices 
    function my_test_plugin_admin_notice()
    {
    	//get the current screen
    	$screen = get_current_screen();
    
    	//return if not plugin settings page 
    	//To get the exact your screen ID just do var_dump($screen)
    	if ( $screen->id !== 'toplevel_page_YOUR_PLUGIN_PAGE_SLUG') return;
    		
    	//Checks if settings updated 
    	if ( isset( $_GET['settings-updated'] ) ) {
    		//if settings updated successfully 
    		if ( 'true' === $_GET['settings-updated'] ) : ?>
    
    			<div class="notice notice-success is-dismissible">
    				<p><?php _e('Congratulations! You did a very good job.', 'textdomain') ?></p>
    			</div>
    
    		<?php else : ?>
    
    			<div class="notice notice-warning is-dismissible">
    				<p><?php _e('Sorry, I can not go through this.', 'textdomain') ?></p>
    			</div>
    			
    		<?php endif;
    	}
    }
    add_action( 'admin_notices', 'my_test_plugin_admin_notice' );

    The class notice-success will display the message with a white background and a green left border and the class notice-error will display the message with a white background and a red left border.

    if you want to display the errors you can also use notice-warning for a yellow/orange for a blue left border.

  8. Skip to note 18 content

    The admin_notices hook doesn’t do anything on a Block Editor screen. For that reason you need to print it second time with JS.

    Here is an example, of how to make a notification that will show on Post Edit Screen if Gutenberg is used:

    add_action( 'admin_notices', 'wpdocs_custom_notice' );
    
    function wpdocs_custom_notice(): void {
    	$message = 'Hello World!';
    	$type    = 'info';
    
    	if ( empty( $message ) || empty( $type ) ) {
    		return;
    	}
    
    	?>
    	<div class="notice notice-<?php echo esc_attr( $type ); ?> is-dismissible">
    		<?php echo wpautop( $message ); ?>
    	</div>
    
    	<script>
    		( function( wp ) {
    			wp.data.dispatch( 'core/notices' ).createNotice(
    				'<?php echo sanitize_text_field( $type ); ?>',
    				'<?php echo sanitize_text_field( $message ); ?>',
    				{
    					isDismissible: true,
    				}
    			);
    		} )( window.wp );
    	</script>
    	<?php
    }
  9. Skip to note 19 content

    Here is code to display a notice after a page refresh(for example after a post has been saved/updated).

    class WPDocsAdminNotice {
    	const NOTICE_FIELD = 'wpdocs_admin_notice_message';
    
    	public function displayAdminNotice() {
    		$option      = get_option( self::NOTICE_FIELD );
    		$message     = isset( $option['message'] ) ? $option['message'] : false;
    		$noticeLevel = ! empty( $option['notice-level'] ) ? $option['notice-level'] : 'notice-error';
    
    		if ( $message ) {
    			echo $message;
    			delete_option( self::NOTICE_FIELD );
    		}
    	}
    
    	public static function displayError( $message ) {
    		self::updateOption($message, 'notice-error');
    	}
    
    	public static function displayWarning( $message ) {
    		self::updateOption($message, 'notice-warning');
    	}
    
    	public static function displayInfo( $message ) {
    		self::updateOption($message, 'notice-info');
    	}
    
    	public static function displaySuccess( $message ) {
    		self::updateOption($message, 'notice-success');
    	}
    
    	protected static function updateOption( $message, $noticeLevel ) {
    		update_option( self::NOTICE_FIELD, array(
    			'message' => $message,
    			'notice-level' => $noticeLevel
    		) );
    	}
    }

    Usage

    Add this action at the top level of your code:

    add_action( 'admin_notices', array( new WPDocsAdminNotice(), 'displayAdminNotice' ) );

    Then use the class anywhere in your code:

    WPDocsAdminNotice::displayError( __( 'An error occurred, check logs.' ) );
  10. Skip to note 20 content

    As of WordPress 6.4, you can output admin notice/messages with two new functions (which are yet to be documented):

    wp_admin_notice() and wp_get_admin_notice();

    First parameter is your message as a string; second parameter is an args array with the most useful being type: [ 'type' => 'error' ].

    So for example:

    if ( $error === true ) {
      wp_admin_notice( 'There was an error!', [ 'type' => 'error' ] );
    }

    More information:
    https://make.wordpress.org/core/2023/10/16/introducing-admin-notice-functions-in-wordpress-6-4/

You must log in before being able to contribute a note or feedback.