Cum să folosești checkbox și radio button în pagina de opțiuni?
Poate vi se pare prostesc, dar nu am reușit să îmi dau seama cum să fac asta. Pentru input-ul de tip text aș folosi doar:
<input type="text" name="option_name" value="<?php echo get_option('option_name'); ?>" />
și apoi l-aș conecta la WordPress folosind register_setting()
. Astfel, aș putea obține valoarea prin get_option('option_name')
. Cum ar trebui să procedez în cazul checkbox-urilor și al butoanelor radio?

casetă de selectare:
<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />
buton 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' ) ); ?> />

Ai dat un răspuns direct la întrebare, așa că primești un +1 de la mine... ;)

De obicei stochez multiple opțiuni ca un array, așa că aș avea ceva de genul acesta..
<?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'] ); ?> />
Totuși, depinde cum funcția de callback care sanitizează datele primite se ocupă de valoarea salvată (callback-ul pe care ar trebui să-l definești ca al treilea parametru al register_setting
). Personal, când lucrez cu checkbox-uri, nu setez cheia array-ului, în timp ce alții pot alege să seteze cheia la 0 (sau altceva)...
Deci codul meu de fapt arată mai degrabă așa..
<?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'] ) ); ?> />
Dacă lucrez doar cu checkbox-uri, funcția mea de callback pentru sanitizare va arăta cam așa..
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;
}
Am extras asta direct dintr-una din clasele mele de plugin (un plugin cu doar opțiuni de tip checkbox), dar nu este un cod pe care să te aștepți să funcționeze dacă îl copiezi, este acolo doar pentru ilustrare..
Pentru butoanele radio, dacă nu folosești selecție multiplă, arată cam așa..
<?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Ă: Bineînțeles, ar fi înțelept să verifici dacă cheia este setată înainte de a o compara cu valoarea ei (am omis asta mai sus pentru a păstra lucrurile scurte).
A fost de ajutor cele de mai sus? Dacă nu, spune-mi doar ce trebuie clarificat... (sau ce am omis)..
RE: checked()
Poți găsi unde este definită funcția (în WordPress) aici. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228
Primul parametru este practic o condiție, iar al doilea parametru (dacă vrei să-l definești) este cu ce să verifici. Valoarea implicită pentru comparație este TRUE... deci dacă aș face checked( 1 == 1, true )
, aș verifica dacă 1 == 1 este egal cu true. Dacă condiția este îndeplinită, atunci vei primi checked="checked"
returnat..
NOTĂ: Sunt slab la explicat, deci dacă cele de mai sus necesită clarificări suplimentare nu mă voi simți ofensat... doar spune-mi.. ;)

Creierul meu nu funcționează acum pentru că sunt frustrat că nu am reușit să îmi dau seama singur de asta. Poți să explici ce face checked( 1 == $options['option_one']
? Este checked()
o funcție PHP pentru că nu am găsit-o în manual.

Nu pot explica într-un comentariu, voi actualiza răspunsul meu în curând, vezi mai sus.. ;)

Aha! Mulțumesc mult pentru ajutor! Funcția checked()
este singura pe care nu am reușit să o găsesc prin Google pentru că se pare că nu este documentată. Eram atât de obișnuit să obțin exact ce vreau când caut "termen + wordpress". :-)

Pentru a clarifica, primul parametru este ce să verifici, al doilea este cu ce să compari prima valoare... așadar, ai putea face asta de exemplu... checked( 1, 2 )
pentru a verifica dacă 1 este egal cu 2 ... ceea ce nu ar afișa nimic, deoarece această funcție este concepută special pentru a afișa starea bifată pentru checkbox-uri sau butoane radio... în orice caz, mă bucur să te ajut... ;)
