J'utilise Wordpress Settings API
. Tout fonctionne comme il se doit sauf cette liste déroulante select
. Lorsque je sélectionne une option, la valeur en écho est correcte mais dans le menu déroulant, elle affiche la première valeur par défaut, i.e 6
, et non celle sélectionnée. Où vais-je mal?
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>';
}
La raison pour laquelle votre condition $item == $option
échoue toujours est à cause de la manière dont PHP compare les flottants!
Essayez plutôt ce qui suit:
echo "<option value='$item'" . selected (abs ($item - $options) <= 0.01, true, false) . ">$item</option>" ;
Voir Comparaison de flotteurs pour plus d'informations.
J'ai parcouru cela et je peux dire qu'il existe une fonction WP appelée selected
, que vous pouvez voir dans ce link . Utilisez cette fonction au lieu de: if ( $item == $options )
. Et votre code pourrait ressembler à ceci:
foreach ( $seconds as $second => $time ) {
?>
<option value="<?php echo $second; ?>" <?php selected( $browser_cache_ttl, $second ); ?>><?php echo $time; ?></option>
<?php
}
Donc, cette fonction parcourt le $seconds
et obtient le $second
et le $time
, met te $second
comme valeur, puis appelle la fonction sélectionnée dont le premier paramètre est la valeur à comparer et le second est la valeur actuelle. Si ces valeurs sont identiques, il Je serai sélectionné.
Je pense que c'est ce que vous recherchez. Dis-moi si ça a marché.
Remplacez votre sélection par ceci ... J'espère que cela fonctionne ...
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>';