Gravity Forms Wordpress Выбор даты Проверка возраста

Я использую Gravity Forms (1.8.9) и Wordpress (3.9.1)

У меня есть поле формы в качестве средства выбора даты на моем сайте, и я хочу разрешить отправку только в том случае, если пользователю 21 год или больше, чтобы он мог отправить форму.

Первоначально я использовал следующий код. Некоторое время он работал только для одной формы, но затем полностью перестал работать: http://lanche86.com/gravity-forms-18-years-old-verification/

Я хотел бы иметь возможность использовать один и тот же код в разных формах. Помощь!


person dynamicad    schedule 21.07.2014    source источник


Ответы (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. Если идентификатор вашей формы равен 8, а номер поля равен 2, вы можете изменить его на gform_field_validation_8_2.

Вы также можете добавить один и тот же фильтр несколько раз для нескольких форм и полей без повторного создания функции dob_validate.

person designtocode    schedule 21.07.2014
comment
спасибо, я использовал очень похожий код, и он работал нормально, но вдруг перестал работать. Я также пытался использовать ваш код, и я все еще могу отправить форму. Я думаю, что это конфликт с моей темой или плагином. Этот сайт предназначен для казино, и тема была предоставлена ​​нам разработчиком, который работал над сайтом для другой собственности того же казино. Все написано как кастомные поды. Мне может не повезти. Однако, спасибо! - person dynamicad; 21.07.2014

Если кому-то все еще нужно реализовать это, попробуйте следующее:

    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 );

Документация по Gravity Forms: https://docs.gravityforms.com/gform_field_validation/#13-date-field-age-validation

person Trending Consullting    schedule 28.09.2018
comment
этот чек, включая месяц и день справа. Что, если я просто хочу проверить год. То есть, скажем, сегодня 4 февраля 2020 года, люди, родившиеся 5 февраля 2002 года, также возвращаются. Если они родились в 2002 году или младше. - person iceiceicy; 01.04.2020