我不想在1到1000之间写出这样的东西:
<select name="number_pick" id="number_pick" >
<option value="1" <?php selected( \'1\', get_the_author_meta( \'number\', $user->ID ) ); ?>>1</option>
<option value="2" <?php selected( \'2\', get_the_author_meta( \'number\', $user->ID ) ); ?>>2</option>
<option value="3" <?php selected( \'3\', get_the_author_meta( \'number\', $user->ID ) ); ?>>3</option>
</select>
因此,我尝试使用foreach语句从1到1000。我想我很接近,但我有点不对劲,我不知道是什么。
<select name="number_pick" id="number_pick" >
<?php foreach (range(0,1000) as $number)
echo "<option value=\'$number\' selected( \'$number\', get_the_author_meta( \'number_pick\', $user->ID ) ) >$number</option>"; ?>
</select>
有人能告诉我上面几行我遗漏了什么吗?
以下是完整的代码:
<?php
add_action( \'show_user_profile\', \'show_extra_profile_fields\' );
add_action( \'edit_user_profile\', \'show_extra_profile_fields\' );
function show_extra_profile_fields( $user ) { ?>
<h3>Extra profile information</h3>
<table class="form-table">
<tr>
<th><label for="number_pick">Pick A Number</label></th>
<td>
<select name="number_pick" id="number_pick" >
<?php foreach (range(0,1000) as $number)
echo "<option value=\'$number\' selected( \'$number\', get_the_author_meta( \'number_pick\', $user->ID ) ) >$number</option>"; ?>
</select>
</td>
</tr>
</table>
<?php }
add_action( \'personal_options_update\', \'save_extra_profile_fields\' );
add_action( \'edit_user_profile_update\', \'save_extra_profile_fields\' );
function save_extra_profile_fields( $user_id ) {
if ( !current_user_can( \'edit_user\', $user_id ) )
return false;
update_usermeta( $user_id, \'number_pick\', $_POST[\'gender\'] );
}
?>
最合适的回答,由SO网友:Bainternet 整理而成
您可以使用保存1000个条件检查str_replace
您的代码将更加高效,如下所示:
//create the select options
$options =\'\';
for($i=1;$i<=1000;$i++) {
$options.= \'<option value="\'.$i.\'">\'.$i.\'</option>\';
}
//get the saved data
$saved = get_the_author_meta( \'number_pick\', $user->ID );
$saved = (!empty($saved))? $saved: false;
if ($saved)
//if there is a saved data set the option to selected
$options = str_replace(\'value="\'.$saved.\'"\',\'value="\'.$saved.\'" selected="selected"\',$options);
//echo out the options
echo $options;
SO网友:Rob Vermeer
首先,为什么要下拉1000个项目?为什么不使用textinput字段并检查输入是否在1到1000之间?
但好吧,答案是:
<?php for($number=1;$number<=1000;$number++) : ?>
<option value="<?php echo $number; ?>" <?php selected( $number, get_the_author_meta( \'number_pick\', $user->ID ); ?>><?php echo $number; ?></option>
<?php endfor; ?>
所以你的问题是存钱。
update_usermeta( $user_id, \'number_pick\', $_POST[\'gender\'] );
这里的$\\u POST name是gender,这不应该是number\\u pick吗?
update_user_meta( $user_id, \'number_pick\', $_POST[\'number_pick\'] );
顺便说一句:update\\u usermeta已被弃用,您应该改用update\\u user\\u meta()。