私はWordpress Settings API
を使っています。このselect
ドロップダウンを除いて、すべてが正常に機能します。オプションを選択すると、エコーされた値は正しいですが、ドロップダウンにはデフォルトの最初の値、つまり6
が表示され、選択した値は表示されません。どこが悪いの?
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>';
}
$item == $option
条件が常に失敗するのは、PHPがフロートを比較する方法が原因です。
代わりに次のことを試してください。
echo "<option value='$item'" . selected (abs ($item - $options) <= 0.01, true, false) . ">$item</option>" ;
詳しくは フロートの比較 をご覧ください。
私はこれを経験しました、そして私はあなたがこの link で見ることができるselected
と呼ばれるWP関数があると言うことができます。 if ( $item == $options )
の代わりにこの関数を使用してください。そしてあなたのコードは次のようになります。
foreach ( $seconds as $second => $time ) {
?>
<option value="<?php echo $second; ?>" <?php selected( $browser_cache_ttl, $second ); ?>><?php echo $time; ?></option>
<?php
}
そのため、関数は$seconds
をループして$second
と$time
を取得し、te $second
を値として設定します。次に、最初のパラメータが比較対象の値で、2番目のパラメータが現在の値です。選択されます。
私はそれがあなたが探しているものだと思います。うまくいったら教えてください。
これであなたの選択を置き換えてください。
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>';