WordPress settings API error when checkbox unchecked

I am trying to creating some custom options for a template I am developing but I am getting an error when the checkbox (Line 130) is unchecked:

Warning: Illegal string offset ‘show_admin_dev’ in E:\composite-cms\WordPress-Settings-Sandbox-master\lib\admin\pages\dev-page.php on line 11

This is the line that seems to be throwing the error:

if ( $options['show_admin_dev'] == 1 )

The entire code can be found on GitHub.

2 Answers
2

Your problem is that you haven’t included a sanitization function as the third parameter to register_settings on line 111. When no sanitization provided WordPress deletes the value of the option and creates a new one based only on what is passed in $_POST. Since unchecked checkboxes are not sent by the browser at all you end up with $options['show_admin_dev'] being not set.

You should try to add sanitization which adds the value if it is not in the option

register_setting(
  'ccms_developer_options',
  'ccms_developer_options',
  'ccms_developer_sanit' 
);

function ccms_developer_sanit($newval) {
  if (!isset($newval['show_admin_dev'])) 
    $newval['show_admin_dev'] = 0;

  return $newval;
}

Leave a Comment