2013-09-07 10 views
5

Checkbox-Feld auf einer Plugin-Seite, die ich schrieb, wird nicht überprüft werden. Die Daten werden gespeichert, aber das Kontrollkästchen spiegelt nicht den aktuell gespeicherten Wert wider (aktiviert).Checkbox bleibt nicht auf der Plugin-Einstellungen Seite

Hier mein Funktionscode ist:

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']}' />"; 
} 

und der add_settings_field Code:

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

enter image description here

, wie Sie im Bild sehen können, ist der Wert 1, der überprüft wird, Das Kontrollkästchen bleibt jedoch nach dem Aktualisieren immer aktiviert.

Antwort

10

Ich ziehe es für mit printf()(siehe Seite Wordpress checked() Funktion verwenden sprintf() für Verwendungsbeispiele):

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' bedeutet das erste Argument für' printf', also müssen Sie es nicht in der Argumentliste wiederholen . –

+0

@GregLancaster, ja, wie Niklas sagt. Normalerweise verwenden wir nur '% s' ohne' OrderNumber $ '. Wenn Sie jedoch einen der Werte mehrmals verwenden oder in eine benutzerdefinierte Reihenfolge einfügen möchten, wird die Bestellnummer verwendet. Das PHP-Handbuch enthält viele Beispiele. – brasofilo

+0

Würde dies auch mit einem Optionsfeld funktionieren? Ich habe dich als beste Antwort ausgewählt, das funktioniert wie ein Zauber. –

2

Verwenden Sie das checked Attribut des Checkbox-Tag statt:

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

Dies ist only way to have a pre-selected checkbox. Wenn Sie den Wert auf den gespeicherten Wert setzen, wird dies nicht automatisch ausgelöst.

Beachten Sie auch, dass Kontrollkästchen in einem Formular standardmäßig nur dann gesendet werden, wenn sie aktiviert sind.

+0

Diese Lösung passen wie ein Handschuh, und ist der einzige hier aufgelistet, die das Kontrollkästchen aktiviert gehalten. Danke danke danke. Wenn ich Ihnen mehr Punkte geben könnte, würde ich, vor allem für die Referenz - obwohl ich glaube nicht, dass die Verweis-Link wirklich die Gründe dafür erklärt, warum/wie es funktioniert. –

0

Sie müssen überprüfen, dass das Kontrollkästchen aktiviert ist und den HTML-Teil der Seite darüber "erzählen".

Also schlage ich vor, dass Sie echo is_checkbox_checked() ? "checked" : ""; hinzufügen, wo is_checkbox_checked() die Funktion, die prüft, ob [jo_checkbox_del] ist true oder false.

Ihr endgültiger Code würde wie folgt aussehen:

<?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

Verwendung {checked($this->options['jo_checkbox_del']);} innerhalb des <input> Elements Attribut checked zurückzukehren, wenn die Option gesetzt ist.

ich auch auf dem mit einem versteckten Eingang mit dem gleichen Namen Attribute empfehlen würde, den Fall zu behandeln, wenn die Option nicht

geprüft
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

Der versteckte Eingang stellt sicher, dass ein Wert gesendet wird, wenn der ungeprüfte Checkbox-Eingang nichts sendet, da Niklas erwähnt – zoranc

Verwandte Themen