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

为WordPress及WooCommerce姓名字段添加无数字验证(无需插件)

解决方案:为姓名字段添加数字禁用验证

1. 覆盖所有需验证的场景

要实现全场景验证,需针对以下场景绑定对应的钩子:

  • WordPress后台用户创建/编辑:user_profile_update_errors
  • WooCommerce账户资料保存:woocommerce_save_account_details_errors
  • WordPress前端注册:register_post
  • WooCommerce前端注册:woocommerce_register_post

2. 完整验证代码

基于你提供的代码修改扩展,同时处理名(First name)和姓(Last name)字段,并适配不同场景的参数差异:

// WordPress后台用户编辑/创建验证
add_action( 'user_profile_update_errors', 'validate_name_fields', 10, 3 );
// WooCommerce账户资料保存验证
add_action( 'woocommerce_save_account_details_errors', 'validate_name_fields', 10, 1 );
// WordPress前端注册验证
add_action( 'register_post', 'validate_name_fields_frontend', 10, 3 );
// WooCommerce前端注册验证
add_action( 'woocommerce_register_post', 'validate_name_fields_woocommerce', 10, 3 );

/**
 * 验证姓名字段(后台及WooCommerce账户场景)
 */
function validate_name_fields( $errors ) {
    // 验证名字(First name)
    if ( isset( $_POST['first_name'] ) && preg_match( '~[0-9]+~', $_POST['first_name'] ) ) {
        $errors->add( 'first_name_error', __( '名字中不能包含数字', 'woocommerce' ) );
    }
    // 验证姓氏(Last name)
    if ( isset( $_POST['last_name'] ) && preg_match( '~[0-9]+~', $_POST['last_name'] ) ) {
        $errors->add( 'last_name_error', __( '姓氏中不能包含数字', 'woocommerce' ) );
    }
}

/**
 * WordPress前端注册表单的姓名验证
 */
function validate_name_fields_frontend( $login, $email, $errors ) {
    // 验证名字
    if ( isset( $_POST['first_name'] ) && preg_match( '~[0-9]+~', $_POST['first_name'] ) ) {
        $errors->add( 'first_name_error', __( '名字中不能包含数字', 'default' ) );
    }
    // 验证姓氏
    if ( isset( $_POST['last_name'] ) && preg_match( '~[0-9]+~', $_POST['last_name'] ) ) {
        $errors->add( 'last_name_error', __( '姓氏中不能包含数字', 'default' ) );
    }
}

/**
 * WooCommerce前端注册表单的姓名验证
 */
function validate_name_fields_woocommerce( $username, $email, $errors ) {
    // 验证名字(WooCommerce注册表单字段名为billing_first_name)
    if ( isset( $_POST['billing_first_name'] ) && preg_match( '~[0-9]+~', $_POST['billing_first_name'] ) ) {
        $errors->add( 'billing_first_name_error', __( '名字中不能包含数字', 'woocommerce' ) );
    }
    // 验证姓氏(WooCommerce注册表单字段名为billing_last_name)
    if ( isset( $_POST['billing_last_name'] ) && preg_match( '~[0-9]+~', $_POST['billing_last_name'] ) ) {
        $errors->add( 'billing_last_name_error', __( '姓氏中不能包含数字', 'woocommerce' ) );
    }
}

代码说明

  • 钩子适配:不同场景的钩子参数结构、字段名存在差异(比如WooCommerce前端注册用billing_first_name而非first_name),因此拆分函数针对性处理。
  • 验证逻辑:通过preg_match检测字段值是否包含数字,若不符合规则则添加对应错误提示。
  • 多语言兼容:错误提示使用翻译函数__(),并对应不同场景的文本域,确保多语言环境下正常显示。

使用方式

将上述代码添加到主题的functions.php文件,或自定义插件的PHP文件中即可生效。

内容的提问来源于stack exchange,提问作者R. De Caluwe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:31:03