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? 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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.