Seçenekler sayfasında onay kutusu ve radyo düğmesi nasıl kullanılır?


16

Bana aptal deyin ama nasıl yapacağımı bilemiyorum. Metin girişi için sadece:

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

ve daha sonra kullanarak workdpress'e asın register_setting(). Sonra değeri aracılığıyla alabilir get_option('option_name'). Bunu onay kutuları ve radyo düğmeleriyle nasıl yapmalıyım?

Yanıtlar:


25

Bir dizi olarak birden çok seçenek depolamak eğilimindedir, bu yüzden böyle bir şey olurdu ..

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

Bununla birlikte, gelen verileri sterilize eden geri çağırma işlevinin kaydedilen değerle ( üçüncü parametre olarak tanımlamanız gereken geri arama) nasıl davrandığına bağlıdır register_setting. Şahsen ben onay kutuları ile uğraşırken ben dizi anahtarı ayarlamıyorum, nerede diğerleri 0 (ya da bunun yerine) anahtarı ayarlamak için seçebilirsiniz ...

Yani kodum aslında böyle görünüyor.

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

Ben sadece onay kutuları ile ilgileniyorsanız sanitasyon geri arama satırlarında bir şey görünecektir ..

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

Bunu eklenti sınıflarımdan birinden söktüm (sadece onay kutusu seçeneklerine sahip bir eklenti), ancak kopyalarsanız çalışmayı bekleyebileceğiniz kod değil, sadece örnekleme amaçlıdır.

Radyolar için, birden fazla seçim kullanmıyorsanız, böyle bir şey olur ..

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

NOT: Tabii ki değeri ile karşılaştırmak önce ayarlanmış anahtarı kontrol etmek akıllıca olacaktır (kısa tutmak için yukarıdakilerin dışında bıraktım).

Yukarıdakiler yardımcı oldu mu? Değilse, neyin açıklığa kavuşturulması gerektiğini bana bildirin ... (veya neyi kaçırdığımı).

YENİDEN: checked()

İşlevin nerede tanımlandığını (WordPress'te) burada bulabilirsiniz. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

İlk parametre temelde koşullu bir deyimdir ve ikinci parametre (tanımlamak isterseniz) neyi kontrol etmeniz gerektiğidir. Karşılaştırma yapılacak varsayılan değer DOĞRU ... yani checked( 1 == 1, true ), 1 == 1 'in true olup olmadığını kontrol ederdim. Şartlı eşleşmeyle karşılaşırsa, size checked="checked"geri dönersiniz.

NOT: Bir şeyleri açıklamaktan saçmalıyım, bu yüzden yukarıdakilerin daha fazla açıklığa ihtiyacı varsa rahatsız olmayacağım ... sadece bana bildirin ..;)


Beynim bu ime'yi çalışmıyor çünkü bunu kendi başıma çözemediğim için sinirliyim. Ne yaptığını açıklar checked( 1 == $options['option_one']mısınız? Mı checked()ben kılavuzda bulamadım çünkü bir php fonksiyonu.
Joann

Bir yorumda açıklayamam, cevabımı kısaca güncelleyeceğim, yukarıya bakın ..;)
t31os

Ahh! Yardımın için çok teşekkürler! checked()Fonksiyon görünüşe belgelenmiş değil çünkü google aracılığıyla bulamadık sadece bir tanesidir. Ben "terim + wordpress" sorgularken tam olarak ne istediğimi alışkın. :-)
Joann

Açıklığa kavuşturmak için, ilk parametre neyin kontrol checked( 1, 2 )edileceğidir , ikincisi ilk değerin karşılaştırılacağı şeydir ... bu yüzden örneğin bunu yapabilirsiniz ... 1'in 2'ye eşit olup olmadığını kontrol etmek için ... funciton özellikle onay kutuları veya radyo düğmeleri için kontrol edilmiş bir durum çıkarmak için tasarlanmıştır ... her durumda, yardım etmekten mutluluk duyarız ...;)
t31os

33

onay kutusu:

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

radyo:

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

Kodunuzda (türünde) bir yazım hatası var ..
t31os

1
Soruya doğrudan bir cevap verdiniz, bu yüzden benden +1
aldınız

3
Cevap bu olmalı.

Budur! Çözüldü, cevap olmalı.
mircobabini
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.