2013-09-07 5 views
5

Il campo checkbox in una pagina di plug-in che ho scritto non verrà controllato. I dati vengono salvati, ma la casella di controllo non riflette il valore corrente memorizzato (selezionato).La casella di controllo non verrà selezionata nella pagina delle impostazioni del plug-in

Ecco il mio codice funzione:

public function jo_checkbox_del_setting() 
{ 
    echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' />"; 
} 

e il codice add_settings_field:

add_settings_field('jo_checkbox_del', 'Hide Delete Button: ', array($this, 'jo_checkbox_del_setting'), __FILE__, 'jo_main_section'); 

enter image description here

come si può vedere nella foto, il valore è 1 che viene controllata, ma la casella di controllo non rimane mai selezionata dopo l'aggiornamento.

risposta

10

Io preferisco usare WordPress funzione checked() con printf()(si veda la pagina per la sprintf() per esempi di utilizzo):

printf(
    '<input id="%1$s" name="jo_plugin_options[%1$s]" type="checkbox" %2$s />', 
    'jo_checkbox_del', 
    checked(isset($this->options['jo_checkbox_del']), true, false) 
); 
+0

'% 1s' significa il primo argomento a' printf', quindi non devi ripeterlo nella lista degli argomenti . –

+0

@GregLancaster, sì, come dice Niklas. Normalmente, usiamo solo '% s' senza' OrderNumber $ '. Ma se si desidera utilizzare uno dei valori più volte o metterli in un ordine personalizzato, il numero dell'ordine viene inserito. Il manuale PHP ha molti esempi. – brasofilo

+0

Funzionerebbe anche con un pulsante di opzione? Ti ho riselezionato come migliore risposta, funziona come un incantesimo. –

2

utilizzare l'attributo checked del tag casella di controllo, invece:

public function jo_checkbox_del_setting() 
{ 
    $checked = ((int)$this->options['jo_checkbox_del'] == 1) ? 'checked' : ''; 
    echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' $checked />"; 
} 

Questa è la only way to have a pre-selected checkbox. Impostando il valore sul valore memorizzato non verrà automaticamente attivato per essere impostato.

Inoltre, le caselle di controllo in un modulo non verranno inviate per impostazione predefinita a meno che non siano selezionate.

+0

Questa soluzione adatta come un guanto, ed è l'unico quello che trovate qui che ha mantenuto la casella di controllo selezionata. Grazie, grazie, grazie. Se potessi assegnarti più punti, soprattutto per il riferimento, anche se non penso che il link ref spieghi davvero il ragionamento dietro perché/come funziona. –

0

È necessario verificare che la casella di controllo sia selezionata e "indicare" la parte HTML della pagina.

Quindi, vi suggerisco di aggiungere echo is_checkbox_checked() ? "checked" : ""; dove is_checkbox_checked() è la funzione che controlla se è [jo_checkbox_del]true o false.

tuo codice finale sarà simile a questa:

<?php 
public function jo_checkbox_del_setting() 
{ ?> 
<input id='jo_checkbox_del' name='<?php echo jo_plugin_options[jo_checkbox_del]; ?>' type='checkbox' value='<?php echo {$this->options['jo_checkbox_del']}; ?>' <?php echo is_checkbox_checked() ? "checked" : ""; ?> />"; 
<?php } ?> 
3

uso {checked($this->options['jo_checkbox_del']);} all'interno dell'elemento <input> per tornare attributo controllato se l'opzione è impostata.

Io consiglio anche di utilizzare un ingresso nascosto con lo stesso attributo name per gestire il caso in cui l'opzione non è selezionata

public function jo_checkbox_del_setting() { 

     echo "<input type='hidden' name='jo_plugin_options[jo_checkbox_del]' value='0' />"; 

     echo "<input id='jo_checkbox_del' name='jo_plugin_options[jo_checkbox_del]' type='checkbox' value='{$this->options['jo_checkbox_del']}' {checked($this->options['jo_checkbox_del']);} />"; 
} 
+0

l'input nascosto si assicurerà che un valore venga inviato quando l'input della casella di controllo deselezionato non sta inviando nulla in quanto Niklas menziona – zoranc

Problemi correlati