如何为多个字段应用以下代码?网站出现严重错误求助
修复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
相关产品推荐
相关产品推荐

