Dans mon panneau d'administration, si j'utilise un callback register_setting()
de désinfection et que le champ ne passe pas par ma validation personnalisée, j'ai empêché la base de données de se mettre à jour en utilisant return FALSE;
et en ajoutant une erreur avec add_settings_error()
.
Comment puis-je renvoyer les valeurs non valides dans les champs de formulaire que l'utilisateur a soumis, afin qu'ils ne soient pas obligés de tout recommencer?
C'est une très bonne question - ma suggestion est d'utiliser des transitoires. Par exemple, dans votre rappel de validation:
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;
}
Ensuite, sur votre page de paramètres, si les options ont été validées - recherchez le transitoire et utilisez les paramètres "échoués", le cas échéant:
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');
}