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-cmsWordPress-Settings-Sandbox-masterlibadminpagesdev-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.
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
It appears that
$options['show_admin_dev']
is actually a string, not an integer. You’re trying to compare a string to an integer, which really annoys newer versions of PHP.When setting the default option (line 69), you have
show_admin_dev
set to'0'
. Removing the quotes around this should prevent the error.You can also convert
$options['show_admin_dev']
to an integer in the comparison using theintval()
function: