1

I am setting up a plugin and have used the setting API for the first time to create a form in settings. The data for the plugin is initially created by default when the plugin is activated and stored in the database in a serialized format.

Today I added the validation callback function, which works fine to do validation. However when any field fails validation and the function returns false (I have also tried returning NULL) the existing valid data in the database is deleted.

Question is this how things are supposed to happen or am I doing something stupid? I would have expected in this situation that the existing valid data in the database would have remained unaltered until such time as the user had presented a set of valid data to alter it.

Any suggestions appreciated.

1
  • 2
    Post your code please.
    – s_ha_dum
    Commented Jan 29, 2013 at 19:04

1 Answer 1

1

Your sanitize_callback function should not return false or null indicating that input is not valid - its intent is to always return a valid value. The value returned by this function is what will be save to the database, so in order for it to actually sanitize anything it will have to return something that makes sense. Compare it with using intval as in this example, which will force the settings API to store an int value no matter what the input.

Anyway, to solve you problem your should:

  • Return the previously stored value if the input is invalid
  • Return a default value if input is empty (and empty values is not permitted)
  • Return the newly input value if it is deemed valid

Also, in addition to the last statement, your value might well become valid during sanitation: imagine inputs such as " [email protected]" or "0123" which might get be sanitized to "[email protected]" and 123 depending on your needs.

1
  • Simon thanks for your input. I wondered if it would need to work that way but it seemed such a strange way to handle validation processing that it was worth asking the question. Commented Jan 30, 2013 at 13:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.