有时插件或主题需要在WordPress仪表板中向用户显示通知。 使用admin_notices挂钩很容易,它会在屏幕顶部显示一个标准的消息框。如下图:
显示标准通知写法如下:
function my_admin_notice(){
echo '<div class="updated">
<p>I am a little yellow notice.</p>
</div>';
}
add_action('admin_notices', 'my_admin_notice');
由于该div被分类为“updated”,通知将显示为黄色。 如果班级更改为“error”,则显示为红色。
那么如何禁止通知?
通过多一点工作,也可以显示通知保持存在状态,直到用户点击忽略为止。 这可能是确保用户看到该消息的好方法,但也不会让它感到恼火。
以下示例是从AddThis插件改编而来的。 我也在选项框架中使用类似的东西。
如果用户点击隐藏通知,则会将其偏好保存在用户元中。代码如下:
<pre>/* Display a notice that can be dismissed */
add_action('admin_notices', 'example_admin_notice');
function example_admin_notice() {
global $current_user ;
$user_id = $current_user->ID;
/* Check that the user hasn't already clicked to ignore the message */
if ( ! get_user_meta($user_id, 'example_ignore_notice') ) {
echo '<div class="updated"><p>';
printf(__('This is an annoying nag message. Why do people make these? | <a href="%1$s">Hide Notice</a>'), '?example_nag_ignore=0');
echo "</p></div>";
}
}
add_action('admin_init', 'example_nag_ignore');
function example_nag_ignore() {
global $current_user;
$user_id = $current_user->ID;
/* If user clicks to ignore the notice, add that to their user meta */
if ( isset($_GET['example_nag_ignore']) && '0' == $_GET['example_nag_ignore'] ) {
add_user_meta($user_id, 'example_ignore_notice', 'true', true);
}
}</pre>
仅在某些管理页面上显示通知
如果可能,将通知的目标定位在用户需要查看它们的特定页面上。 你可以通过使用$ pagenow全局变量来实现。
例如,此通知只会出现在插件页面上:
<pre>function my_admin_notice(){
global $pagenow;
if ( $pagenow == 'plugins.php' ) {
echo '<div class="updated">
<p>This notice only appears on the plugins page.</p>
</div>';
}
}
add_action('admin_notices', 'my_admin_notice');</pre>
显示通知前检查用户角色
通知应该只显示给实际上可以对它们做些什么的用户。 例如,如果用户无法编辑主题选项,则显示关于它的通知毫无意义。
以下是您可能想要执行的一些常见角色检查:
<pre>if ( current_user_can( 'install_plugins' ) )
if ( current_user_can( 'manage_options' ) )
if ( current_user_can( 'edit_theme_options' ) )</pre>