管理者以外のユーザーの更新情報を削除または非表示にしようとしています。管理者として、私は見ます:
私がこれを処理するために見た一般的な答えは使用することを言います:
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が利用可能です!今すぐ更新してください)が、2番目のメッセージは管理者以外には見えます:
両方のメッセージは<div class="update-nag">
でラップされているので、 1つのオプション は上記のコードを修正してCSSを使用してタグを隠します。
echo '<style>.update-nag {display: none}</style>';
しかし、これは私にとって不器用に感じます。管理者以外のユーザーに対して、アクションにフックしたり、update nagメッセージをフィルタリングしたり削除したりする方法はありますか?サードパーティのプラグインの推奨事項はありません。
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
です。
基本的に2つの更新名があり、admin-filters.php
にあります。
add_action( 'admin_notices', 'update_nag', 3 );
add_action( 'admin_notices', 'maintenance_nag', 10 );
だから私たちが使用できる2番目のメッセージを削除するには(あなたがこれを管理者以外の人だけにしたい場合は、現在のユーザーロールもチェックしてください)
remove_action( 'admin_notices', 'maintenance_nag', 10 );
マルチサイト用
remove_action( 'network_admin_notices', 'maintenance_nag', 10 );
これが完全なコードで、現時点ではうまくいくようです。
add_action('admin_head', function() {
if(!current_user_can('manage_options')){
remove_action( 'admin_notices', 'update_nag', 3 );
remove_action( 'admin_notices', 'maintenance_nag', 10 );
}
});
@bravokeylはおそらくあなたの当面の問題への最良の答えです。
しかし、次のように対処します。
管理者以外のユーザーに対して、アクションにフックしたり、update nagメッセージをフィルタリングしたり削除したりする方法はありますか?
いいえ。WordPressのNagメッセージは、HTMLをページに出力するadmin_notices
フックに追加される単なるコールバックです。それらは、エラーや成功のメッセージ、あるいはWordPressからの他の「通知」やその他のプラグインやテーマに関するものと実質的に同じです。
CSSでナグを隠す は hackyです。プラグイン/テーマによっては誤って.update-nag
クラスを使用して目的のスタイルを独自の通知に提供するため、誤検知が発生しやすいです。
それほど煩わしくない方法は、通知を表示したくない各コールバックを明示的に削除することです(管理者以外)。しかし、これはそのリストを維持し、「ネットを滑る」という通知がないことを保証する(おそらく非常に低コスト)ということになります。