Bagaimana cara menggunakan kotak centang dan tombol radio di halaman opsi?

16

Panggil aku bodoh tapi aku tidak tahu bagaimana melakukannya. Untuk input teks saya hanya akan:

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

dan kemudian menghubungkannya ke workdpress menggunakan register_setting(). Saya kemudian bisa mendapatkan nilainya melalui get_option('option_name'). Bagaimana saya melakukannya dengan kotak centang dan tombol radio?

Joann
sumber

Jawaban:

25

Saya cenderung menyimpan beberapa opsi sebagai array, jadi saya akan memiliki sesuatu seperti ini ..

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

Namun itu tergantung bagaimana fungsi panggilan balik yang membersihkan data yang masuk berkaitan dengan nilai yang disimpan (panggilan balik yang Anda harus definisikan sebagai parameter ketiga register_setting). Secara pribadi ketika saya berurusan dengan kotak centang, saya tidak mengatur kunci array, di mana orang lain dapat memilih untuk mengatur kunci ke 0 (atau apa pun sebagai gantinya) ...

Jadi kode saya sebenarnya cenderung terlihat seperti ini ..

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

Jika saya hanya berurusan dengan kotak centang, panggilan balik sanitasi saya akan terlihat seperti ini ..

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;
}

Ripped itu langsung dari salah satu kelas plugin saya (sebuah plugin dengan hanya opsi kotak centang), tapi itu bukan kode yang dapat Anda harapkan berfungsi jika Anda menyalin, itu ada di sana hanya untuk ilustrasi ..

Untuk radio, jika Anda tidak menggunakan banyak pilihan, akan seperti ini ..

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

CATATAN: Tentu saja akan bijaksana untuk memeriksa kunci yang ditetapkan sebelum membandingkan dengan nilainya (saya telah meninggalkan itu di atas agar tetap pendek).

Apakah bantuan di atas? Jika tidak, beri tahu saya apa yang perlu diklarifikasi ... (atau apa yang saya lewatkan) ..

KEMBALI: checked()

Anda dapat menemukan di mana fungsi didefinisikan (di WordPress) di sini. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Parameter pertama pada dasarnya adalah pernyataan bersyarat, dan parameter kedua (jika Anda ingin mendefinisikannya) adalah apa yang harus diperiksa. Nilai default untuk dibandingkan adalah BENAR ... jadi jika harus dilakukan checked( 1 == 1, true )saya akan memeriksa apakah 1 == 1 sama dengan true. Jika persyaratan hits pertandingan, maka Anda akan checked="checked"dikembalikan kepada Anda ..

CATATAN: Saya sampah menjelaskan hal-hal, jadi jika hal di atas memerlukan klarifikasi lebih lanjut, saya tidak akan tersinggung ... beri tahu saya ..;)

t31os
sumber
Otak saya tidak berfungsi seperti ini karena saya frustrasi karena saya tidak dapat memecahkannya sendiri. Bisakah Anda menjelaskan apa checked( 1 == $options['option_one']? Merupakan checked()fungsi php karena saya tidak dapat menemukannya di manual.
Joann
Saya tidak dapat menjelaskan dalam komentar, saya akan segera memperbarui jawaban saya, lihat di atas ..;)
t31os
Ahh! Terima kasih banyak atas bantuannya! The checked()Fungsi adalah satu-satunya saya tidak bisa menemukan melalui google karena tampaknya tidak didokumentasikan. Saya sudah terbiasa mendapatkan apa yang saya inginkan ketika menanyakan "term + wordpress". :-)
Joann
Untuk memperjelas, parameter pertama adalah apa yang harus diperiksa, kedua adalah apa yang membandingkan nilai pertama terhadap ... sehingga Anda bisa melakukan ini misalnya ... checked( 1, 2 )untuk memeriksa apakah 1 sama dengan 2 ... yang akan menghasilkan apa-apa, karena ini funciton dirancang khusus untuk menampilkan keadaan yang dicentang untuk kotak centang atau tombol radio .. dalam hal apa pun, dengan senang hati membantu ...;)
t31os
33

kotak centang:

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

radio:

<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' ) ); ?> />
zeo
sumber
Ada kesalahan ketik dalam kode Anda (tipe) ..
t31os
1
Anda memberi jawaban langsung ke pertanyaan, sehingga Anda mendapatkan +1 dari saya ...;)
t31os
3
Ini seharusnya jawabannya.
Ini dia! Terpecahkan, harus menjadi jawabannya.
mircobabini