Why might $input (Settings API) be coming through empty?

The $input variable is not passed to the validate function by default. You need to declare it, e.g. not this:

function mytheme_validate_settings() {}

But rather, this:

function mytheme_validate_settings( $input ) {}

(Or maybe I’m the only one who’s made that bone-headed mistake before?) 🙂

EDIT:

The other thing to check: does the $optiongroup in register_setting() match the argument passed to settings_fields() in your form markup?

Leave a Comment