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


16

バカと呼んでも、どうやってやるのかわからない。テキスト入力の場合、私はただ:

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

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

回答:


25

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

<?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'] ); ?> />

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

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

<?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"返されます。

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


私は自分でこれを理解できなかったことに不満を抱いているので、私の脳はこのimeを機能させていません。何を説明できますchecked( 1 == $options['option_one']か?でchecked()、私は手動でそれを見つけることができなかったので、PHPの関数。
ジョアン

コメントで説明することはできません。すぐに回答を更新します。上記を参照してください。;)
t31os

ああ!助けてくれてありがとう!このchecked()関数は、明らかに文書化されていないため、Googleで見つけることができなかった唯一のものです。「term + wordpress」をクエリするときに、必要なものを正確に取得することに慣れていました。:
ジョアン

明確にするために、最初のパラメーターはチェックするものであり、2番目は最初の値と比較するものです...たとえば、これを行うことができます... checked( 1, 2 )1が2に等しいかどうかをチェックするため... funcitonはspecificially出力aに設計されて...助けて幸せ、いかなる場合にも..チェックボックスやラジオボタンの状態をチェックする;)
t31os

33

チェックボックス:

<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' ) ); ?> />

コードにタイプミスがあります(タイプ)..
t31os

1
あなたは質問に直接答えたので、あなたは私から+1を得る...;)
t31os

3
これが答えです。

これだよ!解決された、答えでなければなりません。
mircobabini
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.