カスタムメニューページにadd_settings_errorを実装するにはどうすればよいですか?


8

プロフェッショナルWordPressのプラグイン開発の本は、正しく設定APIを使用する方法を詳細に説明し、それはまた、メニューとサブメニューを追加する方法を示していますが、残念ながらそれは、この任意の加入アップの例を提供していません。私はほとんどそれを機能させることができましたが、カスタムメニューページにadd_settings_errorを適切に実装する方法を理解できません。これが私のコードです:

function settings_main_validate( $input ) {
$valid['text_string'] = preg_replace( '/[^a-zA-Z]/', '', $input['text_string'] );

if ( $valid['text_string'] != $input['text_string'] ) {
    //add_setting_error: $title, $id, $error_message, $class
    add_settings_error( 'fields_main_input', 'texterror', 'Incorrect value entered!', 'error' );
}   

return $valid;
}                  

上記の検証はadd_options_page、を使用してレンダリングされた設定でうまく機能しますが、でレンダリングされたページに設定エラーを表示しませんadd_menu_page

回答:


8

エラー/通知の作成および表示プロセスには、いくつかのコンポーネントがあります。

  1. add_settings_error()スタックにアイテムを追加するための呼び出し(グローバル$wp_settings_errors変数)。
  2. settings_errors ページ間を移動してもエラーが発生しないように一時的にエラーを保持します。
  3. settings_errors()get_settings_errors()メモリまたは一時的なエラーを取得して表示する関数。

これらはSettings APIのチャームのように機能しますが、残念ながら一般的な使用のために設定されていません。一方、これを回避するのは簡単です。

プラグインのページにフックsettings_errors()admin_notices、そこにエラーコードを渡して、自分のものだけを表示します。

エラーをsettings_errors一時的に一時的に保存します(そのグローバル変数をそこに入れます)。

get_settings_errors()GETパラメータ($_GET['settings-updated'])でメモリではなく一時的なチェックを行う必要があるというヒントを期待しているので、それを提供するか、一時的にエラーを取得して、settings_errors()呼び出しの前にグローバル変数に保存することができます。

更新

あなたはこれを複数の質問で少し混乱させているので、ここであなたの懸念に対処しようと思います。

設定API 、基本として設定セクションを使用しない管理ページで機能します。あなたの本当の問題は、その場合、エラー/通知のレポートが機能しないことです。

まず、Settings APIで設定したフォームを投稿するとどうなるかを次に示します。

  1. 特別options.phpページにデータが投稿されます。
  2. コールバックを使用してデータがサニタイズ/検証されます。
  3. サニタイズ/検証中に発生したエラー/通知はすべて収集され、一時的に保存されます。
  4. 元の場所にリダイレクトさます。

管理ページをロードすると、このページが設定セクションに属しているかどうかがチェックされそのケースに小さなoptions-head.phpファイルが含まれている場合、エラー通知の取得と表示が処理されます。

したがって、他のページで「機能しない」唯一のことは、この関連する手順の概要を自分で実行するのは簡単なこの後者のステップです(一時的な問題についてはあまり詳しくしすぎたので、基本的なケースでは必要ありません)。


Settings APIは実際には管理メニューや画面で使用するように設計されていないということですか?
jnthnclrk

@trnsfrmrよく、それが設計されたのか設計されなかったのかを言うのは私の場所ではありませんが、それは確かにネイティブで設定されていません。
Rarst、2011

くそー、私はそれを完全に間違っていました。それで、Settings APIは、単に[設定]メニュー項目の下にある画面用ですか?カスタムメニューでそれを使用することがなぜ難しいのかを説明する後から考えてみてください。
jnthnclrk

カスタムメニューを使用するプラグインでは、Settings APIのすべての優れた機能を利用できないのは残念なことのようです。
jnthnclrk

@trnsfrmrよく試して利用できます。余分な労力を費やすだけです
Rarst

0

少し遅れましたが、私はこれを経験しました。OPのコードに基づいて、私が見つけた最良の解決策はこのコードを挿入することです:

function your_admin_notices_action() {
    settings_errors( 'fields_main_input' );
}
add_action( 'admin_notices', 'your_admin_notices_action' );

これにより、add_menu_pageを使用してレンダリングされた管理ページに管理通知の表示が追加されます


-1

単に追加する

include_once 'options-head.php'; 

カスタムメニューページの$ functionに、カスタムメニューページにエラーメッセージを表示するために正常に機能するように見えました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.