Das Kontrollkästchen bleibt auf der Seite mit den Plugin-Einstellungen nicht aktiviert

Lesezeit: 3 Minuten

Benutzer-Avatar
Gregor L

Mein Kontrollkästchenfeld auf einer von mir geschriebenen Plugin-Seite bleibt nicht aktiviert. Die Daten werden gespeichert, aber das Kontrollkästchen gibt nicht den aktuell gespeicherten Wert wieder (markiert).

Hier ist mein Funktionscode:

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 die add_settings_field Code:

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

Geben Sie hier die Bildbeschreibung ein

Wie Sie im Bild sehen können, ist der Wert 1, der aktiviert ist, aber das Kontrollkästchen bleibt nach der Aktualisierung nie aktiviert.

Benutzer-Avatar
brasophilo

Ich bevorzuge WordPress checked() Funktion mit printf() (Siehe die Seite für sprintf() für Anwendungsbeispiele):

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

  • %1s bedeutet das erste Argument zu printfsodass Sie es nicht in der Argumentliste wiederholen müssen.

    – Niklas Lindblad

    8. September 2013 um 9:42 Uhr

  • @GregLancaster, ja, wie Niklas sagt. Normalerweise verwenden wir nur %s ohne OrderNumber$. Wenn Sie jedoch einen der Werte mehrfach verwenden oder in einer benutzerdefinierten Reihenfolge platzieren möchten, kommt die Bestellnummer zum Einsatz. Das PHP-Handbuch enthält viele Beispiele.

    – Brasilo

    8. September 2013 um 12:55 Uhr

  • Funktioniert das auch mit einem Optionsbutton? Ich habe Sie als beste Antwort erneut ausgewählt, das funktioniert wie ein Zauber.

    – Gregor L

    23. November 2013 um 9:48 Uhr

Benutzer-Avatar
zoranc

verwenden {checked($this->options['jo_checkbox_del']);} innerhalb der <input> Element, um das geprüfte Attribut zurückzugeben, wenn die Option gesetzt ist.

Ich würde auch empfehlen, eine versteckte Eingabe mit demselben Namensattribut zu verwenden, um den Fall zu behandeln, wenn die Option nicht aktiviert ist

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

  • Die versteckte Eingabe stellt sicher, dass ein Wert gesendet wird, wenn die deaktivierte Checkbox-Eingabe nichts sendet, wie Niklas erwähnt hat

    – zoranc

    7. September 2013 um 16:52 Uhr

Verwenden Sie die checked stattdessen das Attribut des Checkbox-Tags:

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 das einzige Möglichkeit, ein vorab ausgewähltes Kontrollkästchen zu haben. Das Einstellen des Werts auf den gespeicherten Wert löst nicht automatisch die Einstellung aus.

Beachten Sie auch, dass standardmäßig Kontrollkästchen in einem Formular überhaupt nicht mitgesendet werden, wenn sie nicht aktiviert sind.

  • Diese Lösung passt wie angegossen und ist die EINZIGE hier aufgeführte, bei der das Kontrollkästchen aktiviert bleibt. Danke danke danke. Wenn ich Ihnen mehr Punkte vergeben könnte, würde ich dies tun, insbesondere für die Referenz – obwohl ich nicht glaube, dass der Ref-Link wirklich die Gründe dafür erklärt, warum / wie es funktioniert.

    – Gregor L

    9. September 2013 um 2:06 Uhr

Sie müssen überprüfen, ob das Kontrollkästchen aktiviert ist, und dies dem HTML-Teil der Seite mitteilen.

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

Ihr endgültiger Code würde so 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 } ?>

1364730cookie-checkDas Kontrollkästchen bleibt auf der Seite mit den Plugin-Einstellungen nicht aktiviert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy