【WordPress】全ての管理画面に共通メッセージを表示する
更新日:2023/02/02
WordPressの全ての管理画面に、共通のメッセージを表示してみます。
共通のメッセージを表示する
次のようなメッセージを、全ての管理画面に表示してみます。
add_settings_error()を使用する
管理画面にメッセージを表示するには、add_settings_error()でメッセージを登録後にsettings_errors()の実行する必要があります。
これについては、次の記事で紹介しています。
上記のページでは、特定のページに表示させるように制御しているので、今回はその制御を外すだけです。
ただし、『設定』の各サブメニューと『ツール』の個人データのエクスポートと個人データの削除は、settings_errors()の実行が重複するので対象から外します。
add_action('all_admin_notices',function(){
add_settings_error('my_test_menu', 'my_test_menu', 'メッセージ' , 'info');
global $hook_suffix,$parent_file;
if ( 'options-general.php' === $parent_file ) return;
$array = array('export-personal-data.php'
,'erase-personal-data.php');
if( in_array($hook_suffix,$array) ) return;
settings_errors();
});
$hook_suffixはページ毎の、$parent_fileは親ページのサフィックスです。
この値を見て、settings_errors()の実行するか判断しています。
なお、このコードはWordPressのバージョン6.1.1で確認しています。
バージョンが異なると、対象となるサフィックスも異なる可能性があります。
またプラグインで管理画面を追加していて、settings_errors()を実行しているケースがあります。
この場合もサフィックスを調べて除外する必要がありますが、現実的ではありませんね…
add_settings_error()を使用しない
前項の方法は、全てのケースに対応させるのが難しいです。
実際のところ、add_settings_error()は引数をグローバル変数にそのままセットするだけです。
そして、add_settings_error()は変数を見てタグを組み立てているだけです。
そこで、all_admin_noticesアクションフックで直接タグを組み立てます。
add_action('all_admin_notices',function(){
// $typeは'error', 'success', 'warning', 'info'
$type = 'info';
// add_settings_errorの2番目の引数
$code = 'my_test_menu';
// 表示するメッセージ
$message = 'メッセージ';
$id = 'setting-error-' . esc_attr($code);
$class = 'notice notice-'. esc_attr($type) . ' settings-error is-dismissible';
?>
<div id="<?= $id ?>" class="<?= $class ?>">
<p><strong><?= $message ?></strong></p>
</div>
<?php
});
この方法なら、既存の管理画面やプラグインでadd_settings_error()を使用しているかどうかを気にする必要がありません。
特定のメッセージを表示させるだけなら、こちらの方がよさそうです。
更新日:2023/02/02
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。