问题描述

我正在尝试删除或隐藏 non-admin 用户的更新 nags 。作为管理员,我看到:

我看到处理这个流行的答案说使用:

function hide_update_nag() {
    if ( !current_user_can('update_core') ) {
        remove_action( 'admin_notices', 'update_nag', 3 );
    }
}
add_action( 'admin_head', 'hide_update_nag', 1 );

这适用于删除第一个消息 (WordPress 4.5.3 可用!请现在更新),但离开第二个可见 non-admins:

两个消息都包装在一个<div class="update-nag"> 中,所以 one option 是修改上面的代码块,使用 CSS 来隐藏 nag:

echo '<style>.update-nag {display: none}</style>';

但这对我来说感觉很棒。有没有办法挂钩一个动作或过滤器,并删除所有的更新消息为 non-admin 用户?没有 third-party 插件推荐。

最佳解决方案

wp-admin/includes/update.php 文件

if ( current_user_can('update_core') )
        $msg = sprintf( __('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php' );
    else
        $msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');

我们可以看到基于当前用户角色的消息是不同的,这是 maintenance_nag

基本上我们有两个更新,可以在 admin-filters.php 中找到

add_action( 'admin_notices', 'update_nag',      3  );
add_action( 'admin_notices', 'maintenance_nag', 10 );

所以要删除我们可以使用的第二个消息 (如果你只想要这个 non-admins,也检查当前的用户角色)

remove_action( 'admin_notices', 'maintenance_nag', 10 );

对于 multi-site 使用

remove_action( 'network_admin_notices', 'maintenance_nag', 10 );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。