如何将数字1-1000的下拉列表添加为额外的配置文件字段?

时间:2012-01-26 作者:Carson

我不想在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\'] );
            }
        ?>

2 个回复
最合适的回答,由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()。

结束

相关推荐