web-dev-qa-db-ja.com

設定APIを使用して管理者設定ページの複数のチェックボックスフィールドを処理する方法

私はプラグインの管理者設定ページにチェックボックスのリストを組み込もうとしています。そこからユーザーはすべての国のリストからいくつかの国を選択できます。

これまでのところ私はこれをやった:

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][]

データを取得して保存する方法については、私は本当に混乱しています。また、どのチェックボックスがユーザーによって選択されているかを簡単に確認する方法もあります。

だれでも手伝うことができればそれは素晴らしいでしょう。前もって感謝します。

2
iSaumya

checked()を使う代わりに、下記のようにin_array()を使うことができます -

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

これが役に立つことを願っています。

1
Nitesh
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
Web Developer