Come utilizzare checkbox e radio button nella pagina delle opzioni?
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?

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

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

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

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.

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

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

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