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

WooCommerce编辑账户页面报错:“显示名称为必填字段”问题求助

解决WooCommerce账户编辑页“显示名称为必填字段”错误

我来帮你一步步排查并解决这个问题,分两种场景给出具体方案:

一、让display_name字段正常通过验证

你添加的<input>或<select>没生效,大概率是字段的渲染逻辑或值传递出了问题。WooCommerce在验证账户表单时,会严格检查display_name字段的存在性和有效值,你可以按照官方标准写法重构这个字段:

1. 输入框(Input)的正确写法

确保字段结构、名称属性和值传递都符合WooCommerce的要求:

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="display_name"><?php esc_html_e( 'Display name', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
    <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="display_name" id="display_name" value="<?php echo esc_attr( $user->display_name ); ?>" />
    <span class="description"><?php esc_html_e( 'This will be how your name appears in your account and reviews.', 'woocommerce' ); ?></span>
</p>

要保证这个字段被包裹在账户表单的<form>标签内,name="display_name"属性不能写错,这样提交时值才能正确传递到后台。

2. 下拉选择框(Select)的正确写法

如果想用下拉框,需要确保选项值和用户当前的display_name匹配,且字段名称保持为display_name:

<p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
    <label for="display_name"><?php esc_html_e( 'Display name', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
    <select name="display_name" id="display_name" class="woocommerce-Input woocommerce-Input--select select">
        <option value="<?php echo esc_attr( $user->user_login ); ?>" <?php selected( $user->display_name, $user->user_login ); ?>><?php echo esc_html( $user->user_login ); ?></option>
        <option value="<?php echo esc_attr( $user->nickname ); ?>" <?php selected( $user->display_name, $user->nickname ); ?>><?php echo esc_html( $user->nickname ); ?></option>
        <option value="<?php echo esc_attr( $user->first_name . ' ' . $user->last_name ); ?>" <?php selected( $user->display_name, $user->first_name . ' ' . $user->last_name ); ?>><?php echo esc_html( $user->first_name . ' ' . $user->last_name ); ?></option>
    </select>
    <span class="description"><?php esc_html_e( 'Choose how your name appears publicly.', 'woocommerce' ); ?></span>
</p>

核心是让选中的选项值和用户当前的显示名称对应,确保提交时display_name参数能被后台正确接收。

二、将display_name设置为非必填字段

如果你的业务场景不需要强制填写显示名称,可以通过WooCommerce的过滤器移除它的必填规则,最新版WooCommerce(6.x及以上版本)都适用:

在你的主题functions.php文件或自定义插件中添加以下代码:

add_filter( 'woocommerce_save_account_details_required_fields', 'remove_display_name_required_check' );
function remove_display_name_required_check( $required_fields ) {
    // 移除display_name的必填要求
    if ( isset( $required_fields['display_name'] ) ) {
        unset( $required_fields['display_name'] );
    }
    return $required_fields;
}

添加后,WooCommerce就不会再检查display_name字段是否为空了。记得同步去掉字段标签里的<span class="required">*</span>,避免误导用户。

另外,如果你是用自定义模板修改账户页面,要确保没有覆盖WooCommerce的默认验证逻辑,也没有在自定义代码中额外添加对display_name的必填检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:37:32