3

I'm trying to incorporate a list of checkbox in my plugin's admin settings page from which users can select a few countries from the list of all countries.

So far I've done this:

add_action( 'admin_init', 'register_page_options' );

function register_page_options() {
    // Add Section for option fields
    add_settings_section( 'aicp_section', __( '....text here....', 'aicp' ), 'display_section', 'aicp_settings' ); // id, title, display cb, page

    // Add Field for selecting countries for which you wanna ban ads
    add_settings_field( 'aicp_country_list', __( 'Select the countries', 'aicp' ), 'country_list_field', 'aicp_settings', 'aicp_section' ); // id, title, display cb, page, section

    // Register Settings
    register_setting( 'aicp_settings', 'aicp_settings_options', array( $this, 'validate_options' ) );
}

// now comes the section for checkbox

function country_list_field() {
    $options = get_option( 'aicp_settings_options' );
    ?>
    <input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php checked( 'AF' == $options['country_list'] ); ?> /> Afganistan
    <input type="checkbox" name="aicp_settings_options[country_list][]" value="AX"<?php checked( 'AX' == $options['country_list'] ); ?> /> Aland Islands
    <?php
}

Please Note: This is not the entire code, but a short part of it to give you guys the idea about my question.

Now as you can see I'm using checkboxes above I want all the selected options to be stored as comma seperated, like AF,AX,IN,US etc. so that when I need to work with those data, I can just simply explode them and use.

Anyways after a bit digging I found this answer: How to use checkbox and radio button in options page? which has showed how to handel checkbox & radio box in the settings api.

But the problem is that as I'm using the checkbox for a country list, I can't just simply used the checked() to see which of the checkbox are selected as there are a ton of country name and the user can select any one of them or all of them or some of them.

Also when I checked this link: https://stackoverflow.com/questions/6881039/how-to-handle-multiple-checkboxes-in-a-php-form it showed me to use [] with the name for the checkbox so that they can be stored as array.

Now as I'm using the WP Settings API I'm already using naming like aicp_settings_options[country_list] which itself is an array. So, should I have to create a 2 dimentional array like this: aicp_settings_options[country_list][] ?

I'm really confused about how should I grab the data and store them. Also how can I easily check which of the checkboxes are selected by the user.

It would be great if anyone can help. Thank you in advance.

2 Answers 2

4
add_action( 'admin_init', 'register_page_options' );

function register_page_options() {
    if (false == get_option('aicp_settings_options')) {
        add_option('aicp_settings_options');
    }

    // Add Section for option fields
    add_settings_section( 'aicp_section', __( '....text here....', 'aicp' ), 'display_section', 'aicp_settings' ); // id, title, display cb, page

    // Add Field for selecting countries for which you wanna ban ads
    add_settings_field( 'aicp_country_list', __( 'Select the countries', 'aicp' ), 'country_list_field', 'aicp_settings', 'aicp_section' ); // id, title, display cb, page, section

    // Register Settings
    register_setting( 'aicp_settings', 'aicp_settings_options', array( $this, 'validate_options' ) );
}

// now comes the section for checkbox

function country_list_field() {
    $options = get_option( 'aicp_settings_options' );

    $value = array();
    if (isset($options['country_list']) && ! empty($options['country_list'])) {
        $value = $options['country_list'];
    }

    $html = '<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"'. in_array('AF', $value) ? 'checked' : '' .'/> Afganistan';
    $html .= '<input type="checkbox" name="aicp_settings_options[country_list][]" value="AX"'. in_array('AX', $value) ? 'checked' : '' .'/> Aland Islands';

    echo $html;
}
1
  • 3
    Please edit your answer, and add an explanation: why could that solve the problem?
    – fuxia
    Commented Feb 20, 2017 at 15:11
1

Instead of Using checked() you can make use of in_array() as mentioned below -

<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php echo in_array('AF', $options['country_list']) ? 'checked' : ''; ?> /> Afganistan

I hope this helps.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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