WordPressの管理画面には、さまざまな警告や通知が表示されます。
- WordPressの新しいバージョンが利用できます
- PHPのバージョンが古くなっています
- サイトに重大な問題があります
- 使用していないテーマを削除してください
- プラグインを更新してください
- 脆弱性が検出されました
- 評価やレビューにご協力ください
もちろん、セキュリティを維持するうえで必要な通知もあります。
しかし、動作確認済みの古いWordPressを使用している、クライアントに更新操作をさせたくない、外部の監視システムで管理しているなど、管理画面に警告を表示したくないケースもあります。
そこで今回は、WordPressのおせっかいな通知から解放されるための方法をまとめます。
最初に知っておきたい注意点
この記事で紹介する方法の多くは、問題を修正するものではなく、管理画面から警告を見えなくするものです。
通知を消しても、古いWordPressやプラグインの脆弱性が解消されるわけではありません。
次のような管理体制が別に用意されているサイトでの利用をおすすめします。
- 管理者が定期的に更新状況を確認している
- 検証環境でアップデートをテストしている
- 外部の脆弱性監視サービスを利用している
- バックアップと復旧手順が用意されている
- クライアント用と保守担当者用のアカウントを分けている
WordPressの通知機能は、管理画面の複数のフックやサイトヘルステストによって出力されています。公式仕様でも、サイトの要件に合わせてサイトヘルスの検査項目を変更できる仕組みが用意されています。
コードはMUプラグインにする
通知を消すコードをテーマのfunctions.phpへ書くと、テーマを変更したときに無効になります。
管理機能を制御するコードは、MUプラグインとして設置するのがおすすめです。
次のファイルを作成します。
/wp-content/mu-plugins/quiet-wordpress-admin.phpmu-pluginsディレクトリが存在しない場合は、新しく作成してください。
最初に、次の内容を記述します。
<?php
/**
* Plugin Name: Quiet WordPress Admin
* Description: WordPress管理画面の通知やサイトヘルス表示を整理します。
* Version: 1.0.0
*/
defined( 'ABSPATH' ) || exit;以下で紹介するコードは、このファイルの末尾へ追加して使用できます。
WordPress本体の更新警告を消す
管理画面上部に表示される「WordPressの新しいバージョンが利用できます」という通知は、次のコードで非表示にできます。
add_action( 'admin_init', function () {
remove_action( 'admin_notices', 'update_nag', 3 );
remove_action( 'network_admin_notices', 'update_nag', 3 );
} );これは更新処理を停止するコードではありません。
管理画面上部の更新案内だけを非表示にします。管理者が「ダッシュボード→更新」を開けば、引き続き更新状況を確認できます。
管理画面の通知を一括で消す
プラグインやテーマが表示する通知を含め、管理画面上部の通知をまとめて消したい場合は、次のコードを使用します。
add_action( 'in_admin_header', function () {
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' );
remove_all_actions( 'user_admin_notices' );
remove_all_actions( 'network_admin_notices' );
}, 0 );WordPressでは、一般的な管理通知がadmin_noticesなどのアクションを利用して出力されています。
このコードを使うと、次のような通知も表示されなくなります。
- プラグインの更新案内
- 初期設定を促すメッセージ
- 有料版へのアップグレード案内
- レビュー依頼
- ライセンス期限の警告
- 保存失敗などのエラー通知
必要なエラーまで見えなくなるため、サイトの保守担当者にも一切通知が不要な場合だけ使用してください。
特定の利用者にだけ通知を表示する
クライアントには通知を見せず、保守担当者には表示したい場合は、ユーザーIDやメールアドレスで判定できます。
次の例では、ユーザーIDが1の管理者だけ通知を確認できます。
add_action( 'in_admin_header', function () {
$user = wp_get_current_user();
if ( 1 === (int) $user->ID ) {
return;
}
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' );
remove_all_actions( 'user_admin_notices' );
remove_all_actions( 'network_admin_notices' );
}, 0 );クライアントへ管理者権限を渡す必要があるサイトでは、この方法が現実的です。
保守担当者は警告を確認でき、クライアントの管理画面だけをすっきりさせられます。
CSSですべての通知を強制的に隠す
独自の方法で通知を表示するプラグインの場合、WordPress標準のアクションを解除しても警告が残ることがあります。
その場合は、管理画面へCSSを追加して強制的に非表示にします。
add_action( 'admin_head', function () {
?>
<style>
.notice,
.notice-error,
.notice-warning,
.notice-info,
.notice-success,
.update-nag,
.error,
.updated {
display: none !important;
}
</style>
<?php
} );非常に強力ですが、投稿の保存結果や設定エラーも見えなくなります。
クライアントだけに適用する場合は、先ほどのユーザー判定と組み合わせます。
add_action( 'admin_head', function () {
$user = wp_get_current_user();
if ( 1 === (int) $user->ID ) {
return;
}
?>
<style>
.notice,
.notice-error,
.notice-warning,
.notice-info,
.notice-success,
.update-nag,
.error,
.updated {
display: none !important;
}
</style>
<?php
} );サイトヘルスの「改善が必要」を消す
WordPressのサイトヘルスは、PHP、データベース、更新状態、HTTPS、REST API、ループバック通信などを検査します。
検査結果によっては「重大な問題」や「おすすめの改善」と表示されます。
すべてのサイトヘルステストを実行させたくない場合は、次のコードを追加します。
add_filter( 'site_status_tests', function ( $tests ) {
$tests['direct'] = array();
$tests['async'] = array();
return $tests;
}, 999 );site_status_testsは、実行するサイトヘルステストを変更するためにWordPressが正式に用意しているフィルタです。
特定のサイトヘルス警告だけを消す
すべての検査を停止するのではなく、不要な項目だけを除外することもできます。
add_filter( 'site_status_tests', function ( $tests ) {
unset( $tests['direct']['wordpress_version'] );
unset( $tests['direct']['plugin_version'] );
unset( $tests['direct']['theme_version'] );
unset( $tests['direct']['php_version'] );
unset( $tests['async']['background_updates'] );
return $tests;
}, 999 );この例では、次の検査を除外しています。
- WordPress本体のバージョン
- プラグインのバージョン
- テーマのバージョン
- PHPのバージョン
- バックグラウンド更新
サイトヘルスには、同期的に実行されるdirectテストと、後から実行されるasyncテストがあります。項目を指定して削除すれば、必要な検査だけ残せます。
ダッシュボードのサイトヘルスを消す
ダッシュボードに表示される「サイトヘルスステータス」のボックスだけを消す場合は、次のコードを使用します。
add_action( 'wp_dashboard_setup', function () {
remove_meta_box(
'dashboard_site_health',
'dashboard',
'normal'
);
} );サイトヘルス機能自体は残り、「ツール→サイトヘルス」から確認できます。
サイトヘルスのメニューも消す
クライアントがサイトヘルス画面を開けないようにする場合は、メニューから削除します。
add_action( 'admin_menu', function () {
remove_submenu_page(
'tools.php',
'site-health.php'
);
}, 999 );これはメニューを非表示にするだけなので、URLを直接入力すると画面を開けます。
アクセス自体も禁止する場合は、次のコードを追加します。
add_action( 'admin_init', function () {
global $pagenow;
if ( 'site-health.php' !== $pagenow ) {
return;
}
$user = wp_get_current_user();
if ( 1 !== (int) $user->ID ) {
wp_safe_redirect( admin_url() );
exit;
}
} );更新件数の赤い数字を消す
プラグインやテーマに更新があると、管理メニューに赤い丸数字が表示されます。
表示だけを消す場合は、管理画面へCSSを追加します。
add_action( 'admin_head', function () {
?>
<style>
#adminmenu .update-plugins,
#wp-admin-bar-updates,
.plugin-count,
.theme-count {
display: none !important;
}
</style>
<?php
} );管理バーの更新アイコンをPHP側から削除することもできます。
add_action( 'admin_bar_menu', function ( $admin_bar ) {
$admin_bar->remove_node( 'updates' );
}, 999 );自動更新の完了メールを止める
WordPress本体が自動更新されると、管理者宛てに結果メールが送信されます。
このメールを停止するには、次のコードを追加します。
add_filter(
'auto_core_update_send_email',
'__return_false'
);プラグインとテーマの自動更新メールも停止する場合は、次のコードを追加します。
add_filter(
'auto_plugin_theme_update_email',
'__return_false'
);WordPress公式の管理者向け資料でも、auto_core_update_send_emailを利用して更新メールを無効化する方法が案内されています。
メールを止めても、自動更新そのものは停止しません。
プラグイン独自の脆弱性警告を消す
セキュリティプラグインや管理サービスによっては、既知の脆弱性を検出すると独自の警告を表示します。
このような警告には、WordPress全体で共通する停止方法がありません。
対処方法は次のいずれかです。
- プラグインの設定画面で通知を無効にする
- プラグイン固有のフィルタを利用する
- 該当する通知のCSSクラスだけを非表示にする
- 管理通知を一括削除する
- クライアントには通知を表示しないユーザー条件を設定する
ブラウザの開発者ツールで警告部分を調べ、固有のCSSクラスを指定すれば、その通知だけを消せます。
add_action( 'admin_head', function () {
?>
<style>
.example-plugin-security-notice {
display: none !important;
}
</style>
<?php
} );example-plugin-security-noticeの部分は、実際に表示されている警告のCSSクラスへ変更してください。
完全非表示版のコード
サイトヘルス、管理通知、更新警告、更新件数をまとめて非表示にする場合は、以下をMUプラグインとして設置します。
<?php
/**
* Plugin Name: Quiet WordPress Admin
* Description: 管理画面の警告、更新通知、サイトヘルスを非表示にします。
* Version: 1.0.0
*/
defined( 'ABSPATH' ) || exit;
/**
* 管理通知を削除
*/
add_action( 'in_admin_header', function () {
remove_all_actions( 'admin_notices' );
remove_all_actions( 'all_admin_notices' );
remove_all_actions( 'user_admin_notices' );
remove_all_actions( 'network_admin_notices' );
}, 0 );
/**
* サイトヘルステストを停止
*/
add_filter( 'site_status_tests', function ( $tests ) {
$tests['direct'] = array();
$tests['async'] = array();
return $tests;
}, 999 );
/**
* ダッシュボードのサイトヘルスを削除
*/
add_action( 'wp_dashboard_setup', function () {
remove_meta_box(
'dashboard_site_health',
'dashboard',
'normal'
);
} );
/**
* サイトヘルスメニューを削除
*/
add_action( 'admin_menu', function () {
remove_submenu_page(
'tools.php',
'site-health.php'
);
}, 999 );
/**
* 更新件数と残った通知をCSSで非表示
*/
add_action( 'admin_head', function () {
?>
<style>
.notice,
.notice-error,
.notice-warning,
.notice-info,
.notice-success,
.update-nag,
.error,
.updated,
#adminmenu .update-plugins,
#wp-admin-bar-updates,
.plugin-count,
.theme-count {
display: none !important;
}
</style>
<?php
} );
/**
* 管理バーの更新アイコンを削除
*/
add_action( 'admin_bar_menu', function ( $admin_bar ) {
$admin_bar->remove_node( 'updates' );
}, 999 );
/**
* 自動更新メールを停止
*/
add_filter(
'auto_core_update_send_email',
'__return_false'
);
add_filter(
'auto_plugin_theme_update_email',
'__return_false'
);警告は消しても、確認手段は残しておく
クライアントが管理画面を利用するサイトでは、大量の警告が不安や誤操作の原因になることがあります。
特に、動作確認をせずに更新ボタンを押されると、テーマの表示崩れやプラグインの競合が発生することもあります。
そのため、クライアントの画面から通知を隠すこと自体は、必ずしも間違った運用ではありません。
ただし、保守担当者まで情報を失ってしまうと、本当に対応が必要な問題を発見できなくなります。
おすすめは、次の運用です。
- クライアントのアカウントだけ通知を非表示にする
- 保守担当者のアカウントには通知を残す
- 定期的にステージング環境で更新を検証する
- 脆弱性情報は別の方法で監視する
- 更新前に必ずバックアップを取得する
WordPressのおせっかいな表示を整理しつつ、裏側ではきちんと保守する。
これが、管理画面の静けさとサイトの安全性を両立させるポイントです。


コメント