如何为MemberPress自定义身份证字段添加提交前自定义验证
为MemberPress注册表单添加身份证自定义字段验证
实现步骤
你可以通过MemberPress提供的专属表单验证钩子,结合自定义身份证校验函数来完成需求,确保仅作用于MemberPress的注册表单:
编写身份证验证函数
先实现一个基础的身份证格式校验逻辑(可根据需求扩展,比如增加出生日期、地区码验证):// 身份证号码验证核心函数 function validate_memberpress_id_card($id_card) { // 清除所有非数字字符,兼容带空格或符号的输入 $id_card = preg_replace('/\D/', '', $id_card); // 验证18位身份证(含校验码) if(strlen($id_card) === 18) { $coefficients = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; $check_codes = ['1','0','X','9','8','7','6','5','4','3','2']; $sum = 0; for($i=0; $i<17; $i++) { $sum += intval($id_card[$i]) * $coefficients[$i]; } $mod = $sum % 11; return $check_codes[$mod] === strtoupper($id_card[17]); } // 兼容15位身份证(可选,根据业务需求保留) elseif(strlen($id_card) === 15) { return preg_match('/^\d{15}$/', $id_card); } return false; }挂钩MemberPress注册表单验证
使用mepr-validate-signup-form钩子(该钩子仅作用于MemberPress注册表单),在表单提交前触发验证:// 绑定MemberPress注册表单验证事件 add_action('mepr-validate-signup-form', 'custom_memberpress_id_card_validation', 10, 1); function custom_memberpress_id_card_validation($form) { // 替换为你在MemberPress后台设置的身份证字段实际name值(可通过页面源码查看) $target_field_name = 'custom_id_card'; $id_card_value = isset($_POST[$target_field_name]) ? trim($_POST[$target_field_name]) : ''; // 验证不通过则标记字段无效并阻止提交 if(empty($id_card_value) || !validate_memberpress_id_card($id_card_value)) { // 第一个参数为错误提示文本,第二个参数关联目标字段,自动标记为无效 mepr_add_error('请输入有效的身份证号码', $target_field_name); } }
注意事项
- 务必将
custom_id_card替换为你在MemberPress后台创建的身份证自定义字段的真实name属性(可在注册表单页面右键查看源码找到)。 - 身份证验证函数可根据业务需求扩展,比如增加出生日期合法性校验、地址码校验等。
mepr_add_error函数会自动阻止表单提交,并在对应字段下方显示错误提示,无需额外处理表单拦截逻辑。
内容的提问来源于stack exchange,提问作者Julio Corral
相关产品推荐
相关产品推荐

