重力形式Wordpress日期选择器年龄验证

时间:2014-07-21 13:48:59

标签: wordpress datepicker gravity-forms-plugin

我正在使用Gravity Forms(1.8.9)和Wordpress(3.9.1)

我的网站上有一个表单字段作为日期选择器,我想仅在用户年满21岁才能提交表单时才允许提交。

我最初使用以下代码。它只适用于单个表单一段时间,但之后它完全停止了工作:http://lanche86.com/gravity-forms-18-years-old-verification/

我希望能够在不同的表单上使用相同的代码。救命啊!

2 个答案:

答案 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,并按照需要工作。截图:

enter image description here

您也可以根据表格和字段进行编辑:

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