I am trying to figure how to have check box implemented in options page . i am able to get the default values but not save and retrieve it . i am using get_option() and checked() functions

 <form method="post" action="options.php" id="theme-options-form">
            <?php settings_fields('wppl-settings-group-new');?>
            <?php do_settings_sections('wppl-settings-group-new');?>


     $default_values = array(
    0 => array(
        'id'             => '0',
        'checkbox_check' => '1',     
    1 => array(
        'id'             => '1',
        'checkbox_check' => '0',       

     $checkboxoutput = get_option('saved_value', $default_values );

    foreach ($checkboxoutput as $value_new) {

         if (isset($value_new['checkbox_check'])) {
            $checkbox_check = $value_new['checkbox_check'];                   
            $checkbox_check = $checkboxoutput[$id]['checkbox_check']; //if not saved use the datefrom defualt ->ID passed

         <li class="sortable-item flexit">

            <input type="checkbox" class="form-check-input" id="exampleCheck1" name="checkboxoutput[<?php echo (int)$id; ?>][checkbox_check]" value="1"<?php checked('1' , $checkbox_check);  ?> 
            <input type="hidden" name="checkboxoutput[<?php echo (int)$id; ?>][checkbox_check]"   value="<?php echo (int)$checkbox_check; ?>" />

    <?php submit_button();?>

It is getting the default values but not getting saved? please help

  • 1
    Notice that checkboxes saves as "on" or "off" in the database, so your conditional logic may fail when you check it as 0/1. – Amirition Nov 19 '18 at 18:14
  • @Amirition any links to documentation pls? should i replace 1 with on or off? – Latheesh V M Villa Nov 19 '18 at 18:28
  • 1
    @Amirition the values are being saved as int , checked – Latheesh V M Villa Nov 19 '18 at 18:48

Full code to add settings page with checkbox option. You don't need loops and something else. WordPress will make everything for you. Get more info in Codex

function wpse_319648_render_popup() {
    $options = get_option('wpse_319648_checkbox');
    $default = isset($options['popup']) ? $options['popup'] : 0;

        '<input type="checkbox" name="%1$s[popup]" value="1" %2$s>',
        checked($default, 1, false)

function wpse_319648_settings_page() {
    echo '<form class="wrap" action="options.php" method="post">';
    echo '</form>';

add_action('admin_init', function() {
    register_setting('wpse-319648-settings', 'wpse_319648_checkbox');

        __('Settings', 'theme'),

        __('Show popup', 'theme'),

add_action('admin_menu', function() {
        __('Options', 'theme'),
        __('Options', 'theme'),

Hope it helps.

  • Hi, thanks but i am confused with answer :) . But i think my case is different? i have to loop through checkboxes and other stuffs – Latheesh V M Villa Nov 19 '18 at 18:26
  • i am taking values from array – Latheesh V M Villa Nov 19 '18 at 18:32
  • Check your values in database table wp_options. It seems that WordPress saves different values than you check – Anton Lukin Nov 19 '18 at 18:35
  • the values are getting saved(1 and 0) but they are of default_values – Latheesh V M Villa Nov 19 '18 at 18:49
  • 1
    i was able to solve my problem by removing <input type="hidden" name="checkboxoutput[<?php echo (int)$id; ?>][checkbox_check]" value="<?php echo (int)$checkbox_check; ?>" /> ...your answer is best method for saving the checkbox so marking it as answer. i am also using the same method but in different way..i showed only the form part – Latheesh V M Villa Nov 20 '18 at 0:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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