Je suis un livre Wordpress et j'essaye de créer un plugin et j'ai une page d'option montrant.
Dans cette page, j'ai deux champs de texte (dont les valeurs sont stockées dans un tableau). J'essaie d'ajouter une validation personnalisée (par exemple, si vide). La validation est définie dans le troisième argument de la fonction register_setting.
Cependant, le livre ne contient aucun exemple de validation possible (en utilisant simplement les fonctions Wordpress pour assainir l’entrée).
Pour obtenir les messages d'erreur indiquant que j'ai suivi ce lien: https://codex.wordpress.org/Function_Reference/add_settings_error
Donc, dans la fonction de validation, j'ai créé quelque chose comme ceci:
if( $input['field_1'] == '' ) {
$type = 'error';
$message = __( 'Error message for field 1.' );
add_settings_error(
'uniq1',
esc_attr( 'settings_updated' ),
$message,
$type
);
} else {
$input['field_1'] = sanitize_text_field( $input['field_1'];
}
if( $input['field_2'] == '' ) {
$type = 'error';
$message = __( 'Error message for field 2.' );
add_settings_error(
'uniq2',
esc_attr( 'settings_updated' ),
$message,
$type
);
} else {
$input['field_2'] = sanitize_text_field( $input['field_2']
}
return $input;
Ce que je suis coincé, c'est comment NE PAS mettre à jour cette valeur si elle rencontre une condition d'erreur. Ce que j'ai actuellement, par exemple avec une valeur vide, affichera le message d'erreur correct mais mettra toujours à jour la valeur vide.
Existe-t-il un moyen de transmettre les anciennes valeurs à cette fonction afin que je puisse définir la valeur sur l'ancienne si elle répond à la condition d'erreur, par exemple:
if( $input['field_1'] != '' ) {
$type = 'error';
$message = __( 'Error message for field 1.' );
add_settings_error(
'uniq1',
esc_attr( 'settings_updated' ),
$message,
$type
);
$input['field_1'] = "OLD VALUE";
} else {
$input['field_1'] = sanitize_text_field( $input['field_1'];
}
Ou si j'approche la chose de la mauvaise façon, si quelqu'un pouvait me diriger dans la bonne direction, ce serait très apprécié.
Ok l'a compris. Dans la fonction qui effectue la validation, j'ai pu obtenir les valeurs d'origine qui ont été enregistrées dans la base de données à partir de la fonction get_option.
//The option name which is set in the second argument in the register_setting function
get_option( 'option_name' );
Après cela, je pouvais définir la valeur d'entrée sur l'ancienne valeur si la condition d'erreur était remplie.
$old_options = get_option( 'option_name' );
if( condition ) {
//$input being the argument name for the validation function
$input['option_name'] = $old_options['option_name'];
}
On dirait que votre argument de validation est négatif.
if ($foo != "") { //means if foo not equal to empty space
// do something when not empty
// here you are setting an error
} else {
// do something when empty
// here you are trying to do your normal operation
}
Vous définissez une erreur lorsque vous avez des données et essayez ensuite de traiter des données lorsque vous n'en avez aucune.
essayez de changer votre !=
en ==
ou changer l'ordre dans lequel vous traitez les choses dans le si