我正在使用Gravity Forms(1.8.9)和Wordpress(3.9.1)
我的网站上有一个表单字段作为日期选择器,我想仅在用户年满21岁才能提交表单时才允许提交。
我最初使用以下代码。它只适用于单个表单一段时间,但之后它完全停止了工作:http://lanche86.com/gravity-forms-18-years-old-verification/
我希望能够在不同的表单上使用相同的代码。救命啊!
答案 0 :(得分:2)
您可以这样做:
add_filter("gform_field_validation_1_1", "dob_validate", 10, 4);
function dob_validate($result, $value, $form, $field){
//Check if dob field matches required age
if ($result["is_valid"]){
// this the minimum age requirement we are validating
$minimum_age = 18;
// calculate age in years like a human, not a computer, based on the same birth date every year
$age = date('Y') - substr($value, 6, 4);
if (strtotime(date('Y-m-d')) - strtotime(date('Y') . '-' . substr($value, 0, 2) . '-' . substr($value, 3, 2)) < 0) {
$age--;
}
if( $age < $minimum_age ){
$result["is_valid"] = false;
$result["message"] = "Sorry, you must be at least $minimum_age years old. You're $age years old.";
}
}
//Check if dob field is empty
if(empty($value)){
$result["is_valid"] = false;
$result["message"] = "This field is required.";
}
return $result;
}
我正在使用Gravity Forms 1.8.8和最新的Wordpress,并按照需要工作。截图:
您也可以根据表格和字段进行编辑:
add_filter("gform_field_validation_1_1", "dob_validate", 10, 4);
gform_field_validation_1_1
适用于表单1和字段1.如果表单ID为8且字段编号为2,则可以将其更改为gform_field_validation_8_2
。
您还可以为多个表单和字段多次添加相同的过滤器,而无需重新创建dob_validate
函数。
答案 1 :(得分:0)
如果仍然需要实施此操作,请尝试以下操作:
add_filter( 'gform_field_validation_1_1', function ( $result, $value, $form, $field ) {
if ( $result['is_valid'] ) {
if ( is_array( $value ) ) {
$value = array_values( $value );
}
$date_value = GFFormsModel::prepare_date( $field->dateFormat, $value );
$today = new DateTime();
$diff = $today->diff( new DateTime( $date_value ) );
$age = $diff->y;
if ( $age < 18 ) {
$result['is_valid'] = false;
$result['message'] = 'Underage';
}
}
return $result;
}, 10, 4 );
它在重力表格文档中:https://docs.gravityforms.com/gform_field_validation/#13-date-field-age-validation