如何使用设置API处理管理设置页面中的多个复选框字段

时间:2016-10-29 作者:iSaumya

我试图在插件的管理设置页面中加入一个复选框列表,用户可以从所有国家的列表中选择几个国家。

到目前为止,我已经做到了:

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: 这不是全部代码,但只是其中的一小部分,让大家了解我的问题。

现在您可以看到,我正在使用上面的复选框,我希望所有选定的选项都存储为comma seperated, 比如AF、AX、IN、US等,所以当我需要处理这些数据时,我可以explode 并使用它们。

无论如何,经过一番挖掘,我找到了这个答案:How to use checkbox and radio button in options page? 显示了如何处理复选框(&;设置api中的收音机框。

但问题是,当我使用国家列表的复选框时,我不能简单地使用checked() 要查看选中了哪个复选框,因为有大量国家名称,用户可以选择其中任何一个或全部或部分。

当我查看此链接时:https://stackoverflow.com/questions/6881039/how-to-handle-multiple-checkboxes-in-a-php-form 它告诉我如何使用[] 使用的名称checkbox 这样就可以将它们存储为数组。

现在,当我使用WP设置API时,我已经在使用类似于aicp_settings_options[country_list] 它本身就是一个数组。那么,我应该创建这样的二维数组吗:aicp_settings_options[country_list][] ?

我真的很困惑我该如何获取数据并存储它们。此外,我还可以轻松检查用户选择了哪些复选框。

如果有人能帮忙,那就太好了。提前谢谢你。

2 个回复
SO网友:Web Developer
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;
}
SO网友:Nitesh

而不是使用checked() 你可以利用in_array() 如下所述-

<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php echo in_array(\'AF\', $options[\'country_list\']) ? \'checked\' : \'\'; ?> /> Afganistan
我希望这有帮助。