Come utilizzare la casella di controllo e il pulsante di opzione nella pagina delle opzioni?


16

Chiamami stupido ma non riesco a capire come farlo. Per l'inserimento del testo vorrei solo:

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

e quindi collegarlo a workdpress usando register_setting(). Potrei quindi ottenere il suo valore get_option('option_name'). Come dovrei farlo con le caselle di controllo e i pulsanti di opzione?

Risposte:


25

Tendo a memorizzare più opzioni come un array, quindi avrei 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 dal modo in cui la funzione di callback che sanifica i dati in entrata gestisce il valore salvato (il callback che dovresti definire come terzo parametro di register_setting). Personalmente quando ho a che fare con le caselle di controllo non imposto la chiave dell'array, dove come altri possono scegliere di impostare la chiave su 0 (o qualunque cosa invece) ...

Quindi il mio codice in realtà tende ad assomigliare a questo ..

<?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 ho solo a che fare con le caselle di controllo, il callback di sanificazione sarà simile 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;
}

Strappato direttamente da una delle mie classi di plugin (un plugin con solo opzioni di casella di controllo), ma non è un codice che puoi aspettarti di funzionare se copi, è lì solo a scopo illustrativo.

Per le radio, se non si utilizza la selezione multipla, va 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 confrontarla con il suo valore (l'ho lasciato fuori da quanto sopra per mantenerlo breve).

Quanto sopra ha aiutato? In caso contrario, fammi sapere cosa deve essere chiarito ... (o cosa mi sto perdendo) ..

RI: checked()

Puoi trovare dove è definita la funzione (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 si desidera definirlo) è cosa da verificare. Il valore predefinito da confrontare è TRUE ... quindi, se lo facessi, checked( 1 == 1, true )verificherei se 1 == 1 è uguale a vero. Se il condizionale colpisce una partita, allora vieni checked="checked"restituito a te ..

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


Il mio cervello non funziona così perché sono frustrato di non riuscire a capirlo da solo. Potresti spiegare cosa checked( 1 == $options['option_one']fa? È checked()una funzione php perché non l'ho trovata nel manuale.
Joann

Non posso spiegare in un commento, aggiornerò la mia risposta a breve, vedi sopra ..;)
t31os

Ahh! Grazie mille per l'aiuto! La checked()funzione è l'unica che non sono riuscita a trovare su Google perché apparentemente non è documentata. Ero così abituato a ottenere esattamente quello che volevo quando interrogavo "term + wordpress". :-)
Joann

Per chiarire, il primo parametro è cosa controllare, il secondo è cosa confrontare il primo valore con ... quindi potresti farlo ad esempio ... checked( 1, 2 )per verificare se 1 è uguale a 2 ... che non produrrebbe nulla, dal momento che questo funciton è specificamente progettato per emettere uno stato controllato per caselle di controllo o pulsanti di opzione .. in ogni caso, felice di aiutare ...;)
t31os

33

casella di controllo:

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

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

C'è un refuso nel tuo codice (il tipo) ..
t31os

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

3
Questa dovrebbe essere la risposta.

Questo è! Risolto, dovrebbe essere la risposta.
mircobabini,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.