Cum să folosești checkbox și radio button în pagina de opțiuni?

7 dec. 2010, 17:08:12
Vizualizări: 69.1K
Voturi: 21

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?

0
Toate răspunsurile la întrebare 2
4
35

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' ) ); ?> />
7 dec. 2010 18:09:18
Comentarii

Există o greșeală de tipar în codul tău (the type)..

t31os t31os
7 dec. 2010 18:20:23

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

t31os t31os
7 dec. 2010 19:21:10

Acesta ar trebui să fie răspunsul.

User User
20 iun. 2013 16:28:22

Asta este! Problema este rezolvată, acesta ar trebui să fie răspunsul corect.

mircobabini mircobabini
7 feb. 2017 15:44:43
4
33

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.. ;)

7 dec. 2010 17:35:23
Comentarii

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.

Joann Joann
7 dec. 2010 18:24:40

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

t31os t31os
7 dec. 2010 18:29:27

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". :-)

Joann Joann
7 dec. 2010 18:53:09

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... ;)

t31os t31os
7 dec. 2010 19:05:45