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.
Your
sanitize_callback
function should not returnfalse
ornull
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 usingintval
as in this example, which will force the settings API to store anint
value no matter what the input.Anyway, to solve you problem your should:
Also, in addition to the last statement, your value might well become valid during sanitation: imagine inputs such as
" user@host.com"
or"0123"
which might get be sanitized to"user@host.com"
and123
depending on your needs.