wp_get_admin_notice()WP 6.4.0

Формирует и возвращает HTML код заметки (сообщение, ошибку), которую мы обычно видим в верхней части админ-панели.

Используйте wp_admin_notice(), когда нужно сразу вывести результат на экран, а не получить его в переменную.

Эту функцию принято вызвать на одном из хуков:

Несмотря на то, что есть специальные хуки для вызова этой функции, технически функцию можно вызывать в любом месте HTML админки. Заметка (уведомление) просто затем перемещается под заголовок JS скриптом. Например, если на момент срабатывания кода, хуки admin_notices уже отработали, но нам все равно нужно вывести заметку, мы можем вывести её прям в контенте или в футере. В этом случае JS скрипт соберёт все заметки (по очереди вывода) и поместит под заголовок:

add_action( 'admin_head', function () {
	wp_admin_notice( 'Вывод на хуке admin_head, то есть в самом верху.' );
} );

add_action( 'admin_footer', function () {
	wp_admin_notice( 'Вывод на хуке admin_footer, то есть в самом низу.' );
} );

add_action( 'shutdown', function () {
	wp_admin_notice( 'А я самый последний хук в системе, но всё равно отображусь под заголовком!' );
} );

Результат выполнения кода:

Раньше, HTML такой заметки нужно было писать вручную и обычно выводить на хуке admin_notices. Теперь есть стандарт.

Пример того, как выглядят заметки:

HTML шаблон простого сообщения (без дополнительных аргументов):

<div class="{class}"><p>{message}</p></div>
Основа для: wp_admin_notice()
1 раз — 0.000071 сек (очень быстро) | 50000 раз — 0.10 сек (скорость света)
Хуки из функции

Возвращает

Строку. HTLM код админ-заметки.

Использование

wp_get_admin_notice( $message, $args );
$message(строка) (обязательный)
Текст сообщения (заметки). Можно использовать HTML. Любое переданное содержимое фильтруется функцией wp_kses_post().
$args(массив)

Массив аргументов для кастомизации заметки.

По умолчанию: пустой массив

  • type(строка)
    Необязательный параметр. Тип заметки, например:

    • success — успех.
    • error — ошибка.
    • warning — предупреждение
    • info — информация.
    • обычной — дефолт - если не указать.
      По умолчанию: пустая строка
  • dismissible(true|false)
    Необязательный параметр. Можно ли закрыть (скрыть) заметку, кликнув мышкой по крестику. Выбор не запоминается, то есть после перезагрузки страницы заметка снова будет отображаться.
    По умолчанию: false

  • id(строка)
    Необязательный параметр. Значение атрибута ID для html контейнера заметки.
    По умолчанию: пустая строка

  • additional_classes(string[])
    Необязательный параметр. Массив CSS классов для html контейнера заметки. Данные классы будут добавлены к классам из списка:

    • notice - базовый класс, присутствует всегда.
    • notice-{type} добавляется, если указан параметр type, например, если type=warning, то добавится класс notice-warning.
    • is-dismissible - добавляется, если указан параметр dismissible.
      По умолчанию: пустой массив
  • paragraph_wrap(true|false)
    Необязательный параметр. Следует ли оборачивать сообщение заметки в тег <p>
    По умолчанию: true

Примеры

0

#1 Соберем заметки и выведем их

$messages = [];

if( 'какое-то условие' ){
	$messages[] = wp_get_admin_notice( 'Заметка 1', [ 'type' => 'error' ] );
}

if( 'какое-то условие' ){
	$messages[] = wp_get_admin_notice( 'Заметка 2', [ 'type' => 'error' ] );
}

// какой-то код

echo implode( "\n", $messages );

Список изменений

С версии 6.4.0 Введена.

Код wp_get_admin_notice() WP 6.5.2

function wp_get_admin_notice( $message, $args = array() ) {
	$defaults = array(
		'type'               => '',
		'dismissible'        => false,
		'id'                 => '',
		'additional_classes' => array(),
		'attributes'         => array(),
		'paragraph_wrap'     => true,
	);

	$args = wp_parse_args( $args, $defaults );

	/**
	 * Filters the arguments for an admin notice.
	 *
	 * @since 6.4.0
	 *
	 * @param array  $args    The arguments for the admin notice.
	 * @param string $message The message for the admin notice.
	 */
	$args       = apply_filters( 'wp_admin_notice_args', $args, $message );
	$id         = '';
	$classes    = 'notice';
	$attributes = '';

	if ( is_string( $args['id'] ) ) {
		$trimmed_id = trim( $args['id'] );

		if ( '' !== $trimmed_id ) {
			$id = 'id="' . $trimmed_id . '" ';
		}
	}

	if ( is_string( $args['type'] ) ) {
		$type = trim( $args['type'] );

		if ( str_contains( $type, ' ' ) ) {
			_doing_it_wrong(
				__FUNCTION__,
				sprintf(
					/* translators: %s: The "type" key. */
					__( 'The %s key must be a string without spaces.' ),
					'<code>type</code>'
				),
				'6.4.0'
			);
		}

		if ( '' !== $type ) {
			$classes .= ' notice-' . $type;
		}
	}

	if ( true === $args['dismissible'] ) {
		$classes .= ' is-dismissible';
	}

	if ( is_array( $args['additional_classes'] ) && ! empty( $args['additional_classes'] ) ) {
		$classes .= ' ' . implode( ' ', $args['additional_classes'] );
	}

	if ( is_array( $args['attributes'] ) && ! empty( $args['attributes'] ) ) {
		$attributes = '';
		foreach ( $args['attributes'] as $attr => $val ) {
			if ( is_bool( $val ) ) {
				$attributes .= $val ? ' ' . $attr : '';
			} elseif ( is_int( $attr ) ) {
				$attributes .= ' ' . esc_attr( trim( $val ) );
			} elseif ( $val ) {
				$attributes .= ' ' . $attr . '="' . esc_attr( trim( $val ) ) . '"';
			}
		}
	}

	if ( false !== $args['paragraph_wrap'] ) {
		$message = "<p>$message</p>";
	}

	$markup = sprintf( '<div %1$sclass="%2$s"%3$s>%4$s</div>', $id, $classes, $attributes, $message );

	/**
	 * Filters the markup for an admin notice.
	 *
	 * @since 6.4.0
	 *
	 * @param string $markup  The HTML markup for the admin notice.
	 * @param string $message The message for the admin notice.
	 * @param array  $args    The arguments for the admin notice.
	 */
	return apply_filters( 'wp_admin_notice_markup', $markup, $message, $args );
}