web-dev-qa-db-de.com

Wählen Sie Dropdown-Liste, die den ausgewählten Wert PHP nicht anzeigt

Ich verwende Wordpress Settings API. Alles funktioniert wie es sollte mit Ausnahme dieser select Dropdown. Wenn ich eine Option auswähle, ist der zurückgegebene Wert korrekt, aber in der Dropdown-Liste wird der erste Standardwert angezeigt, d. H. 6 und nicht der ausgewählte. Wo gehe ich falsch?

 public function someplugin_select() {
            $options = get_option( 'plugin_252calc');
            echo $options; //shows the correct value selected
            $items = array();
            for ($i=6; $i <=10; $i+= 0.1) 
            { 
                $items[] = $i;
            }

            echo '<select id="cf-nb" name="cf-nb">';
            foreach ( $items as $item )
            {
                echo '<option value="'. $item .'"';
                if ( $item == $options ) echo' selected="selected"';
                echo '>'. $item .'</option>';
            }

            echo '</select>';           

        }
2
input

Der Grund, warum Ihre $item == $option-Bedingung immer fehlschlägt, liegt in der Art und Weise, wie PHP Floats vergleicht!

Versuchen Sie stattdessen Folgendes:

echo "<option value='$item'" . selected (abs ($item - $options) <= 0.01, true, false) . ">$item</option>" ;

Siehe Vergleichen von Schwimmern für weitere Informationen.

Ich habe das durchgesehen und konnte feststellen, dass es eine WP -Funktion namens selected gibt, die Sie in diesem link sehen können. Verwenden Sie diese Funktion anstelle von: if ( $item == $options ). Und Ihr Code könnte so aussehen:

foreach ( $seconds as $second => $time ) {
   ?>
      <option value="<?php echo $second; ?>" <?php selected( $browser_cache_ttl, $second ); ?>><?php echo $time; ?></option>
   <?php
}

Diese Funktion durchläuft also $seconds und erhält den $second und den $time, setzt den $second als Wert und ruft dann die ausgewählte Funktion auf, wobei der erste Parameter der zu vergleichende Wert und der zweite der aktuelle Wert ist, falls diese Werte gleich sind wird ausgewählt.

Ich denke, das ist was du suchst. Sag mir, ob es funktioniert hat.

0
Roel Magdaleno

Ersetzen Sie Ihre Auswahl durch diese ... Hoffe, es funktioniert ...

        echo '<select id="cf-nb" name="cf-nb">';
        foreach ( $items as $item ){
            $if_selected = $item == $options ? "selected='selected'" : "";
            echo "<option value='{$item}' {$if_selected}>$item</option>";

        }

        echo '</select>'; 
0