管理メニュー

PHP

【WordPress】add_settings_error()が機能しない時の対処法

更新日:2023/02/02

WordPressのadd_settings_error()は管理画面にメッセージを表示する関数です。
しかしこの関数を実行しても画面上にメッセージが表示されないことがあります。
ここでは、その原因と対処法をお伝えします。

add_settings_error()については、次のページを読んでみてください。
【WordPress】管理画面上部にadd_settings_error()でメッセージを表示する

 

メッセージが表示されない理由

add_settings_error()で登録したメッセージを出力するには、settings_errors()を実行する必要があります。

しかしこの関数は、『設定』の各サブメニューと、『ツール』の個人データのエクスポートと個人データの削除でのみ実行されています。
(※WordPressのバージョン6.1.1にて確認)

それ以外の管理画面でメッセージを表示するには、コードを追加する必要があります。

 

コード例

settings_errors()を実行するタイミングは、2つあります。
一つは、add_menu_page()またはadd_submenu_page()のコールバック関数内です。
二つ目は、all_admin_noticesアクションフックです。

次のようなコードで独自管理画面を作成したケースを例にして、二つの方法をお伝えします。

add_menu_page(
	'テストメニュー',
	'テストメニュー',
	'manage_options',
	'my_test_menu',
	'echo_my_test_menu',
	'',
	3
);

コールバック関数で実行

管理画面を出力するコールバック関数で、settings_errors()を実行します。

function echo_my_test_menu(){
	add_settings_error('my_menu', 'my_menu', 'メッセージ' , 'info');
	settings_errors();
?>
	<div class="wrap">
		<h2>myメニュー</h2>
		<form action="options.php" method="post">

add_settings_error()は、目的の管理画面を表示するときのみに実行する必要があります。
そうしないと、関係ない画面でメッセージが表示されてしまいます。

そのため、settings_errors()の直前でadd_settings_error()を実行するのが、確実です。

all_admin_noticesアクションフックで実行

all_admin_noticesアクションフックは、管理画面のヘッダー共通部分を出力後に呼び出されます。
このフック関数でsettings_errors()を実行します。

add_action('all_admin_notices',function(){
	global $hook_suffix;
	if ('my_test_menu' !== substr($hook_suffix, -strlen('my_test_menu'))) return;
	add_settings_error('my_test_menu', 'my_test_menu', 'メッセージ' , 'info');
	settings_errors();
});

処理中の管理ページの特定は、グローバル変数の$hook_suffixで行います。
独自管理ページの場合、この変数の最後はページのスラッグです。

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/02/02

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。