WordPress:如何为Advanced Custom Fields(ACF)添加自定义字段校验
ACF自定义Pin码字段校验规则生效方案
修正错误操作
- 不要修改ACF插件的核心文件(你改动的
validation.php属于插件核心文件),插件更新后所有修改会被直接覆盖,还容易引发插件运行异常,先把该文件还原为ACF官方默认版本。 - 自定义功能代码的正确存放位置:当前激活主题的
functions.php文件,更推荐存放到子主题的functions.php文件中,避免主题更新后自定义代码丢失。
修正代码逻辑问题
你原有代码存在多处明显错误:
- 不应该在ACF默认的
acf_validate_value函数中插入add_filter代码,过滤器注册需要放在全局执行位置 - 回调函数名不匹配:
add_filter中声明的回调函数名是my_acf_validate_value,但你实际定义的函数名是my_acf_validation_registation_pin,存在拼写和命名不一致问题 - PHP代码中不能使用JS语法
console.log,该语法仅在前端JS代码中生效 - 缺少Pin码校验的核心逻辑,也没有返回对应的校验结果
可用的完整实现代码
将以下代码添加到你主题的functions.php文件末尾即可:
// 注册ACF字段校验规则,针对name为registration_pin的字段生效 add_filter('acf/validate_value/name=registration_pin', 'my_acf_validate_registration_pin', 10, 4); function my_acf_validate_registration_pin($valid, $value, $field, $input_name){ // 如果前置校验已经不通过,直接返回原有结果即可 if( $valid !== true ) { return $valid; } // 核心校验逻辑:判断Pin码是否等于1234 if( trim($value) !== '1234' ){ // 校验不通过时返回自定义错误提示 return 'Pin码错误,请输入正确的1234 Pin码'; } // 校验通过返回true return true; }
效果验证
添加完代码后,在对应表单的Pin码字段输入非1234的内容提交,就会触发你设置的错误提示,自定义校验规则即可正常生效。
内容的提问来源于stack exchange,提问作者tvbRPTI2754
相关产品推荐
相关产品推荐

