it-swarm.com.de

Aktivieren Sie das Kontrollkästchen auf der Optionsseite standardmäßig

Ich erstelle eine Theme-Einstellungsseite. Wenn ich mit dem Codieren der Checkbox-Optionen beginne, funktioniert dies einwandfrei, wenn der Standardwert unchecked ist. Hier ist der Code:

function classy_show_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_show_resume'] ) ) $options['classy_show_resume'] = 0;

    $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked($options['classy_show_resume'], 1, false) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Da ich das Kontrollkästchen jedoch standardmäßig als checked verwenden möchte, musste ich die if-Bedingung des vorherigen Codes ändern. Wenn es leer ist, stellen Sie sicher, dass $options var gleich 1 ist. Der Code lautet also:

function classy_show_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_show_resume'] ) ) $options['classy_show_resume'] = 1;

   $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked($options['classy_show_resume'], 1, false) . " >";

   $html .= "<div class='slider round'></div>";
   $html .= "</label>";

   echo $html;
}

Also hat es geklappt. Das Kontrollkästchen erhält standardmäßig checked, aber als ich unchecked und auf Speichern geklickt habe, ist ein Problem in der Datenbank aufgetreten. Es hat gut funktioniert und der Wert wurde entfernt, aber im Front-End wird der Wert für if condition, der jetzt leer ist, die ganze Zeit als checked auf dem Bildschirm angezeigt, obwohl er sich in Wirklichkeit nicht in der DB befindet (Konflikt).

Wie behebe ich diesen Konflikt?

1
hesham shawky

Option-1: Ändern Sie die Option von showin hidename__:

Der einfachste Weg wäre, die Benennung und das Verhalten der optionzu ändern. Anstelle von $options['classy_show_resume'] können Sie es also als $options['classy_hide_resume'] implementieren.

Auf diese Weise ist hide option standardmäßig nicht markiert , dh, Sie zeigen es standardmäßig an. Dann verstecke es, wenn dieser hide option markiert ist.

Indem Sie einfach den Namen der Option ändern und dann hide option (anstelle des show option) in Ihr Design implementieren, können Sie dies problemlos beheben.

So wird Ihr CODE wie folgt aussehen:

function classy_hide_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_hide_resume'] ) ) $options['classy_hide_resume'] = 0;

    $html .= "<input type='checkbox' name='classy_general_settings[classy_hide_resume]' value='1' " . checked($options['classy_hide_resume'], 1, false) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Option-2: classy_show_resume standardmäßig aktiviert machen:

Wenn Sie classy_show_resume verwenden müssen, wobei die Standardeinstellung aktiviert ist, können Sie die folgende Logik verwenden:

Standardmäßig sollte get_option( 'classy_general_settings' )falsezurückgeben, und wenn es als uncheckedgespeichert wird, ist es entweder eine leere Zeichenfolge oder ein Array, für das $options['classy_show_resume'] nicht festgelegt ist. Wir werden dies verwenden, um den Standardwert im Vergleich zum gespeicherten Wert für checkedoder uncheckedzu bestimmen.

Dementsprechend lautet Ihr neuer CODE wie folgt:

function classy_hide_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $classy_show_resume = 0;
    if ( $options === false ) {
        // nothing is set, so apply the default here
        $classy_show_resume = 1;
    }
    else if( is_array( $options ) && isset( $options['classy_show_resume'] ) ) {
        // classy_show_resume is checked
        $classy_show_resume = $options['classy_show_resume'];
    }

    $html = "<label class='switch'>";

    $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked( $classy_show_resume, 1, false ) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Jetzt sollte es standardmäßig aktiviert sein und den korrekten checked| anzeigen uncheckedstatus nach dem speichern.

1
Fayaz