Elementor Pro表单邮政编码验证:91/92开头代码实现及防垃圾疑问
Elementor Pro 表单邮政编码特定开头验证实现
一、调整代码实现91/92开头的邮政编码验证
你找到的代码是自定义字段的验证模板,只需修改核心验证逻辑,就能实现指定开头的邮政编码校验。下面提供两种可行方案:
方案1:自定义邮政编码字段(适合需要单独字段类型的场景)
直接修改原代码的验证逻辑,补充自定义字段必需的基础方法,完整代码如下:
class Elementor_Postcode_Field extends \ElementorPro\Modules\Forms\Fields\Field_Base { public function validation( $field, $record, $ajax_handler ) { // 空值不验证(若字段设为必填,Elementor会自动处理空值提示) if ( empty( $field['value'] ) ) { return; } // 正则匹配以91或92开头的邮政编码 $postcode = trim( $field['value'] ); if ( ! preg_match( '/^9[12]/', $postcode ) ) { $ajax_handler->add_error( $field['id'], esc_html__( '请输入以91或92开头的邮政编码。', 'textdomain' ) ); } } // 自定义字段必须实现的基础方法 public function get_type() { return 'custom-postcode'; } public function get_name() { return esc_html__( '自定义邮政编码', 'textdomain' ); } public function render( $item, $item_index, $form ) { // 渲染和默认字段一致的输入框 ?> <input type="text" name="<?php echo $this->get_attribute_name( $item, $item_index ); ?>" class="elementor-field-textual" placeholder="<?php echo esc_attr( $item['placeholder'] ); ?>"> <?php } } // 注册自定义字段到Elementor表单 add_action( 'elementor_pro/forms/fields/register', function() { \ElementorPro\Modules\Forms\Fields\Fields_Manager::register_field_type( 'Elementor_Postcode_Field' ); } );
方案2:给现有字段加验证(更简单,无需自定义字段)
如果不想新增字段类型,直接给已有的邮政编码字段加后端验证,只需替换代码中的字段ID即可:
add_action( 'elementor_pro/forms/validation', function( $record, $ajax_handler ) { $fields = $record->get( 'fields' ); // 替换为你表单中邮政编码字段的实际ID(在Elementor编辑器的字段设置中查看) $target_field_id = 'postcode'; if ( isset( $fields[ $target_field_id ] ) ) { $postcode = trim( $fields[ $target_field_id ]['value'] ); if ( ! empty( $postcode ) && ! preg_match( '/^9[12]/', $postcode ) ) { $ajax_handler->add_error( $target_field_id, esc_html__( '请输入以91或92开头的邮政编码。', 'textdomain' ) ); } } }, 10, 2 );
二、验证规则对垃圾机器人的可见性说明
- 前端验证:Elementor表单的前端校验逻辑会通过JS执行,这部分规则可以在页面源码中被查看到,垃圾机器人若能解析JS,可能绕过前端验证。
- 后端验证:上面两种方案的核心验证逻辑都是在服务器端执行的,这部分代码完全隐藏在服务器内部,机器人无法通过前端源码获取,是拦截垃圾信息的可靠屏障。
建议:务必保留后端验证,同时配合Elementor表单的reCAPTCHA功能,进一步提升垃圾信息拦截效果。
内容的提问来源于stack exchange,提问作者Freddy T.
相关产品推荐
相关产品推荐

