Come utilizzare checkbox e radio button nella pagina delle opzioni?

7 dic 2010, 17:08:12
Visualizzazioni: 69.1K
Voti: 21

Chiamatemi stupido ma non sono riuscito a capire come farlo. Per un input di testo farei semplicemente:

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

e poi lo collegherei a WordPress usando register_setting(). Potrei quindi ottenere il suo valore tramite get_option('option_name'). Come dovrei fare questo con checkbox e radio button?

0
Tutte le risposte alla domanda 2
4
35

casella di spunta:

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

pulsante 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 dic 2010 18:09:18
Commenti

C'è un errore di battitura nel tuo codice (il tipo)...

t31os t31os
7 dic 2010 18:20:23

Hai dato una risposta diretta alla domanda, quindi ti meriti un +1 da me... ;)

t31os t31os
7 dic 2010 19:21:10

Questa dovrebbe essere la risposta.

User User
20 giu 2013 16:28:22

Ecco fatto! Risolto, questa dovrebbe essere la risposta.

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

Tendo a memorizzare più opzioni come un array, quindi avrò qualcosa del genere...

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

Tuttavia dipende da come la funzione di callback che sanifica i dati in ingresso gestisce il valore salvato (il callback che dovresti definire come terzo parametro di register_setting). Personalmente quando lavoro con checkbox non imposto la chiave dell'array, mentre altri potrebbero scegliere di impostare la chiave a 0 (o altro)...

Quindi il mio codice tende ad essere così...

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

Se sto lavorando solo con checkbox, la mia funzione di callback per la sanificazione sarà qualcosa del genere...

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

Ho preso questo codice direttamente da una delle mie classi di plugin (un plugin con solo opzioni checkbox), ma non è codice che puoi aspettarti funzioni se lo copi, è lì solo per illustrazione...

Per i radio button, se non stai usando una selezione multipla, sarà qualcosa del genere...

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

NOTA: Sarebbe ovviamente saggio verificare che la chiave sia impostata prima di confrontarne il valore (ho omesso questo nei precedenti esempi per mantenerli brevi).

Ti è stato utile quanto sopra? In caso contrario, fammi sapere cosa necessita di chiarimenti... (o cosa ho tralasciato)..

RIGUARDO: checked()

Puoi trovare dove la funzione è definita (in WordPress) qui. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Il primo parametro è fondamentalmente un'istruzione condizionale, e il secondo parametro (se vuoi definirlo) è ciò con cui confrontare. Il valore predefinito per il confronto è TRUE... quindi se facessi checked( 1 == 1, true ) starei verificando se 1 == 1 è uguale a true. Se la condizione trova una corrispondenza, allora ottieni checked="checked" in output..

NOTA: Sono pessimo nello spiegare le cose, quindi se quanto sopra necessita di ulteriori chiarimenti non mi offenderò... fammelo sapere.. ;)

7 dic 2010 17:35:23
Commenti

Il mio cervello non sta funzionando in questo momento perché sono frustrato dal non essere riuscito a capirlo da solo. Potresti spiegarmi cosa fa checked( 1 == $options['option_one']? checked() è una funzione PHP? Non sono riuscito a trovarla nel manuale.

Joann Joann
7 dic 2010 18:24:40

Non posso spiegarlo in un commento, aggiornerò la mia risposta tra poco, vedi sopra.. ;)

t31os t31os
7 dic 2010 18:29:27

Ahh! Grazie mille per l'aiuto! La funzione checked() è l'unica che non sono riuscito a trovare su Google perché a quanto pare non è documentata. Ero così abituato a ottenere esattamente ciò che voglio cercando "termine + wordpress". :-)

Joann Joann
7 dic 2010 18:53:09

Per chiarire, il primo parametro è ciò che deve essere verificato, il secondo è il valore con cui confrontare il primo... quindi potresti fare ad esempio... checked( 1, 2 ) per verificare se 1 è uguale a 2... il che non produrrà alcun output, poiché questa funzione è specificamente progettata per generare lo stato "checked" per checkbox o radio button.. in ogni caso, felice di esserti stato d'aiuto... ;)

t31os t31os
7 dic 2010 19:05:45