You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何保存后select标签始终显示首个选项?如何设置选中用户上次选择项

解决方法

核心是给与用户已保存的display_name匹配的<option>标签添加selected属性,让页面加载时自动选中对应选项。

修改后的代码(推荐循环写法,更易维护)

<!-- Nickname (nome visualizzato nel sito) -->
<p class="form-row">
  <label class="t2" for="account_display_name"><?php esc_html_e( 'Display name', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>

  <select class="field-settings" name="account_display_name" id="account_display_name">
    <?php
    // 整理所有可选的昵称组合
    $display_options = [
        $user->first_name,
        $user->last_name,
        $user->first_name . $user->last_name,
        $user->last_name . $user->first_name
    ];

    foreach ($display_options as $option) {
        $escaped_option = esc_attr($option);
        // 判断当前选项是否匹配用户已保存的昵称
        $selected = ($escaped_option === esc_attr($user->display_name)) ? 'selected="selected"' : '';
        echo "<option value=\"{$escaped_option}\" {$selected}>{$escaped_option}</option>";
    }
    ?>
  </select> <span class="t4-light"><?php esc_html_e( 'This will be how your name will be displayed in the account section and in reviews', 'woocommerce' ); ?></span>
</p>

代码说明

  1. 循环生成选项:把所有昵称组合放到数组里循环输出,避免重复代码,后续要加新组合也更方便。
  2. 选中状态判断:每次循环对比当前选项的转义值和用户已保存的display_name转义值,相等就添加selected属性。
  3. 安全输出:用esc_attr()处理所有输出内容,符合WordPress/WooCommerce的安全规范,防止XSS攻击。

直接修改原代码的写法(不使用循环)

如果不想用循环,也可以给每个选项单独加判断:

<select class="field-settings" name="account_display_name" id="account_display_name">
  <option value="<?php echo esc_attr( $user->first_name ); ?>" <?php echo (esc_attr($user->first_name) === esc_attr($user->display_name)) ? 'selected="selected"' : ''; ?>><?php echo esc_attr( $user->first_name ); ?></option>
  <option value="<?php echo esc_attr( $user->last_name ); ?>" <?php echo (esc_attr($user->last_name) === esc_attr($user->display_name)) ? 'selected="selected"' : ''; ?>><?php echo esc_attr( $user->last_name ); ?></option>
  <option value="<?php echo esc_attr( $user->first_name . $user->last_name ); ?>" <?php echo (esc_attr($user->first_name . $user->last_name) === esc_attr($user->display_name)) ? 'selected="selected"' : ''; ?>><?php echo esc_attr( $user->first_name . $user->last_name ); ?></option>
  <option value="<?php echo esc_attr( $user->last_name . $user->first_name ); ?>" <?php echo (esc_attr($user->last_name . $user->first_name) === esc_attr($user->display_name)) ? 'selected="selected"' : ''; ?>><?php echo esc_attr( $user->last_name . $user->first_name ); ?></option>
</select>

修改完成后,页面加载时select就会自动选中用户上次保存的昵称选项。

内容的提问来源于stack exchange,提问作者Snorlax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 15:18:14