web-dev-qa-db-ja.com

オプションページでチェックボックスとラジオボタンを使用する方法?

ばかげて電話してください、しかし私はそれをどうやってやるか考えていません。テキスト入力の場合は、

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

それからregister_setting()を使ってworkdpressにフックします。それからget_option('option_name')を通してその値を得ることができました。チェックボックスとラジオボタンでどうすればいいですか。

15
Joann

私は複数のオプションを配列として保存する傾向があるので、このようなものがあります。

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( 1 == $options['option_one'] ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( 1 == $options['option_two'] ); ?> />

ただし、着信データをサニタイズするコールバック関数が保存された値を処理する方法(register_settingの3番目のパラメーターとして定義するコールバックである必要があります)によって異なります。個人的に私がチェックボックスを扱っているとき、私は配列キーを設定しません。

私のコードは実際にこのように見える傾向があります。

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( isset( $options['option_one'] ) ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( isset( $options['option_two'] ) ); ?> />

チェックボックスのみを処理している場合、サニタイズコールバックは次のようになります。

public function on_option_save( $options ) {
    if( !is_array( $options ) || empty( $options ) || ( false === $options ) )
        return array();

    $valid_names = array_keys( $this->defaults );
    $clean_options = array();

    foreach( $valid_names as $option_name ) {
        if( isset( $options[$option_name] ) && ( 1 == $options[$option_name] ) )
            $clean_options[$option_name] = 1;
        continue;
    }
    unset( $options );
    return $clean_options;
}

プラグインクラス(チェックボックスオプションのみを備えたプラグイン)の1つから直接リッピングしましたが、コピーした場合に動作するはずのコードではなく、説明のためだけにあります。

ラジオでは、複数選択を使用していない場合、次のようになります。

<?php $options = get_option( 'my_option' ); ?>
<input type="radio" name="myoption[option_three]" value="value1"<?php checked( 'value1' == $options['option_three'] ); ?> />
<input type="radio" name="myoption[option_three]" value="value2"<?php checked( 'value2' == $options['option_three'] ); ?> />

注:もちろん、キーの値と比較する前にキーが設定されていることを確認するのが賢明です(短くするために上記の説明を省略しました)。

上記は役に立ちましたか?そうでない場合は、明確にする必要があるものを教えてください...(または私が不足しているもの)..

RE:checked()

ここで関数が定義されている場所(WordPress内)を見つけることができます。 http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

最初のパラメーターは基本的に条件ステートメントであり、2番目のパラメーター(定義したい場合)はチェック対象です。比較対象のデフォルト値はTRUE...ですので、checked( 1 == 1, true )を実行する場合、1 == 1がtrueに等しいかどうかを確認します。条件が一致した場合、checked="checked"が返されます。

注:私は物事を説明するのが面倒ですので、上記の説明をさらに明確にする必要がある場合は、気分を害することはありません...

24
t31os

チェックボックス

<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

無線:

<input name="option_name" type="radio" value="0" <?php checked( '0', get_option( 'option_name' ) ); ?> />
<input name="option_name" type="radio" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />
33
zeo