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

如何为多个字段应用以下代码?网站出现严重错误求助

修复Gravity Forms多字段语言验证的致命错误问题

错误根源

你提供的代码包含HTML转义字符(比如->、&&),这些不是合法的PHP语法,直接放入主题functions.php或自定义插件会触发语法错误,导致网站出现致命错误。同时部分逻辑可以优化,提升代码可维护性。

修正后的完整代码(推荐合并写法)

// 统一处理多字段语言验证
add_filter( 'gform_field_validation', function( $result, $value, $form, $field ) {
    // 跳过已被标记为无效的字段
    if ( !$result['is_valid'] ) {
        return $result;
    }

    // 英文验证:匹配大小写字母+空格,空值跳过(需强制必填可移除empty判断)
    if ( strpos( $field->cssClass, 'require_english' ) !== false && !empty( $value ) && !preg_match('/^[a-zA-Z\s]+$/', $value) ) {
        $result['is_valid'] = false;
        $result['message'] = 'Please enter only English characters';
    }

    // 孟加拉语验证:限定表单ID=29,指定字段ID+require_bengali类
    $target_form_id = 29;
    $target_fields = array( 1, 9, 30, 54, 59, 61, 71, 73, 83, 85, 33 );
    if ( $form['id'] == $target_form_id && in_array( $field->id, $target_fields ) && strpos( $field->cssClass, 'require_bengali' ) !== false && !empty( $value ) && !preg_match('/^[ঀ-৿\s]+$/u', $value) ) {
        $result['is_valid'] = false;
        $result['message'] = 'Please enter only Bengali characters';
    }

    return $result;
}, 10, 4 );

关键修正点

  • 修复核心语法错误:将HTML转义字符->替换为PHP合法的->,&&替换为&&,这是引发致命错误的主要原因
  • 合并钩子优化:把两个独立钩子整合到通用的gform_field_validation,减少代码冗余,便于后续维护
  • 增加空值判断:添加!empty( $value )逻辑,避免空字段触发验证(若需强制必填验证,可移除该判断)
  • 优先级处理:先跳过已标记无效的字段,避免与Gravity Forms内置验证规则冲突
  • 明确验证范围:孟加拉语验证限定在指定表单和字段内,防止影响其他表单的正常逻辑

单独钩子的替代写法(如需分开逻辑)

如果希望保持两个独立的验证钩子,确保语法正确即可:

// 表单20的字段6:英文验证
add_filter( 'gform_field_validation_20_6', function( $result, $value, $form, $field ) {
    if ( !$result['is_valid'] ) {
        return $result;
    }

    if ( strpos( $field->cssClass, 'require_english' ) !== false && !empty( $value ) && !preg_match('/^[a-zA-Z\s]+$/', $value) ) {
        $result['is_valid'] = false;
        $result['message'] = 'Please enter only English characters';
    }

    return $result;
}, 10, 4 );

// 表单29的指定字段:孟加拉语验证
add_filter( 'gform_field_validation_29', function( $result, $value, $form, $field ) {
    if ( !$result['is_valid'] ) {
        return $result;
    }

    $target_fields = array( 1, 9, 30, 54, 59, 61, 71, 73, 83, 85, 33 );
    if ( in_array( $field->id, $target_fields ) && strpos( $field->cssClass, 'require_bengali' ) !== false && !empty( $value ) && !preg_match('/^[ঀ-৿\s]+$/u', $value) ) {
        $result['is_valid'] = false;
        $result['message'] = 'Please enter only Bengali characters';
    }

    return $result;
}, 10, 4 );

验证注意事项

  • 确保你的Gravity Forms版本支持gform_field_validation钩子(该钩子为标准验证钩子,兼容绝大多数版本)
  • 若字段设置为必填,Gravity Forms会先执行内置必填验证,再触发自定义验证逻辑
  • 孟加拉语正则的/u修饰符必须保留,确保正确匹配Unicode字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:08:08