私の管理パネルで、register_setting()
のサニタイズコールバックを使用していてもフィールドがカスタム検証を通過しない場合、return FALSE;
を使用してadd_settings_error()
にエラーを追加することでデータベースの更新を妨げています。
無効な値をユーザーが送信したフォームフィールドに返して、最初からやり直す必要がないようにするにはどうすればよいですか。
これは本当に良い質問です - 私の提案はトランジェントを使うことです。たとえば、検証コールバックでは、
wpse51669_validation_cb($settings){
//Perform validation checks
if( $valid ){
//If settings validate
return $validate_settings;
}
//Otherwise add settings error
add_settings_error('my-plug-in-settings','error-with-xyz', 'I fell over','error');
//And add the failed settings to a transient
set_transient( 'my-plug-in-settings-invalid', $settings, 60);
return false;
}
それからあなたの設定ページで、オプションが検証されているなら - 一時的なものをチェックし、もし見つかれば '失敗した'設定を使う:
if( isset($_GET['settings-updated']) && $_GET['settings-updated'] && get_transient('my-plug-in-settings-invalid') ){
$options_to_display = get_transient('my-plug-in-settings-invalid');
delete_transient('my-plug-in-settings-invalid');
}else{
$options_to_display = get_option('my-plug-in-settings');
}