私はプラグインの管理者設定ページにチェックボックスのリストを組み込もうとしています。そこからユーザーはすべての国のリストからいくつかの国を選択できます。
これまでのところ私はこれをやった:
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
}
注意してください。これはコード全体ではありませんが、私の質問に関するアイデアを皆さんに提供するための短い部分です。
AF、AX、IN、USなど、選択したすべてのオプションをcomma seperated
として保存することをお勧めします。そのため、これらのデータを操作する必要がある場合は、単にexplode
を使用します。そして使用する。
とにかくちょっと掘り下げた後、私はこの答えを見つけました: どのようにオプションページでチェックボックスとラジオボタンを使うべきですか? チェックボックスとラジオボックスの使い方を示しました設定API。
しかし、問題は、私が国のリストにチェックボックスを使用しているとき、国の名前が大量に存在し、ユーザーが次のいずれかを選択できるため、checked()
を使用してどのチェックボックスが選択されるかを確認できないことです。それら、またはそれらすべて、あるいはそれらのいくつか。
また、私がこのリンクをチェックしたとき: https://stackoverflow.com/questions/6881039/how-to-handle-multiple-checkboxes-in-a-php-form 配列として格納できるように、checkbox
の名前に[]
を使用することを示しました。
現在、私はWP Settings APIを使用しているので、それ自体が配列であるaicp_settings_options[country_list]
のような名前を既に使用しています。だから、私はこのような2次元配列を作成する必要があります:aicp_settings_options[country_list][]
?
データを取得して保存する方法については、私は本当に混乱しています。また、どのチェックボックスがユーザーによって選択されているかを簡単に確認する方法もあります。
だれでも手伝うことができればそれは素晴らしいでしょう。前もって感謝します。
checked()
を使う代わりに、下記のようにin_array()
を使うことができます -
<input type="checkbox" name="aicp_settings_options[country_list][]" value="AF"<?php echo in_array('AF', $options['country_list']) ? 'checked' : ''; ?> /> Afganistan
これが役に立つことを願っています。
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;
}