wp_get_admin_notice()
云策文档标注
概述
wp_get_admin_notice() 函数用于生成并返回管理通知的 HTML 标记,适用于 WordPress 后台界面。它接受消息字符串和可选参数数组,可自定义通知类型、可关闭性、ID、类名等属性。
关键要点
- 函数返回管理通知的 HTML 字符串,需手动输出(如使用 echo)。
- 参数 $message 为必需的消息字符串,$args 为可选数组,支持 type(如 'error'、'success')、dismissible、id、additional_classes、attributes 和 paragraph_wrap 等配置。
- 内置过滤器 wp_admin_notice_args 和 wp_admin_notice_markup,允许在运行时修改参数和标记。
- 输出前需注意转义,建议使用 wp_kses_post() 等函数确保安全性。
代码示例
$message = wp_get_admin_notice(
__( 'The menu has been successfully deleted.', 'your-text-domain' ),
array(
'id' => 'message',
'additional_classes' => array( 'updated' ),
'dismissible' => true,
)
);
echo wp_kses_post( $message );注意事项
- 生成的标记未完全转义,输出前应使用适当转义函数(如 wp_kses_post())。
- type 参数应为无空格的字符串,否则会触发 _doing_it_wrong() 警告。
- 函数自 WordPress 6.4.0 版本引入。
原文内容
Creates and returns the markup for an admin notice.
Parameters
$messagestringrequired-
The message.
$argsarrayoptional-
An array of arguments for the admin notice.
typestringOptional. The type of admin notice.
For example,'error','success','warning','info'.dismissibleboolOptional. Whether the admin notice is dismissible. Default false.idstringOptional. The value of the admin notice’s ID attribute.additional_classesstring[]Optional. A string array of class names.attributesstring[]Optional. Additional attributes for the notice div.paragraph_wrapboolOptional. Whether to wrap the message in paragraph tags. Default true.
Default:
array()
Source
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 );
}
Hooks
- apply_filters( ‘wp_admin_notice_args’, array $args, string $message )
-
Filters the arguments for an admin notice.
- apply_filters( ‘wp_admin_notice_markup’, string $markup, string $message, array $args )
-
Filters the markup for an admin notice.
Changelog
| Version | Description |
|---|---|
| 6.4.0 | Introduced. |
Skip to note 2 content
Baikare Sandip
This methods returns the markup for an admin notice.
$message = wp_get_admin_notice( __( 'The menu has been successfully deleted.', 'your-text-domain' ), array( 'id' => 'message', 'additional_classes' => array( 'updated' ), 'dismissible' => true, ) ); // Print this notice in your admin page. echo wp_kses_post( $message );Note: The markup is not fully escaped and care should be taken to select the appropriate escaping function before output. So I am using here
wp_kses_post()for escaping.Result:
<div id="message" class="notice is-dismissible updated"><p>The menu has been successfully deleted.</p></div>