@freeman0204

Как добавить доп. валидацию в Contact form 7 WP?

В Contact form 7 есть проверка на обязательное заполнение поля. А вот если в поле имейл вписать пару букв, то сообщение спокойно отправляется или если в поле имя вписать цифры то также все отправляется спокойно. В стандартных средствах как включить такую валидацию не нашел, то что есть в интернете у меня не работает.
Как можно решить этот вопрос?
  • Вопрос задан
  • 4373 просмотра
Решения вопроса 1
deniscopro
@deniscopro Куратор тега WordPress
WordPress-разработчик, denisco.pro
А вот если в поле имейл вписать пару букв

Если используется именно поле email, то оно будет валидировать корректность введенного email-адреса.

В стандартных средствах как включить такую валидацию не нашел

Как-то давно делал, в частности менял выводимые сообщения об ошибках.
Выглядело примерно так
//Добавляем фильтры
add_filter('wpcf7_validate_tel*', 'dco_wpcf7_validate', 10, 2);
add_filter('wpcf7_validate_email*', 'dco_wpcf7_validate', 10, 2);
add_filter('wpcf7_validate_text*', 'dco_wpcf7_validate', 10, 2);
add_filter('wpcf7_validate_textarea*', 'dco_wpcf7_validate', 10, 2);

function dco_wpcf7_validate($result, $tag) {
    //Получаем объект тега
    $tag = new WPCF7_Shortcode($tag);

    //Получаем значение поля
    $value = isset($_POST[$tag->name]) ? trim(wp_unslash(strtr((string) $_POST[$tag->name], "\n", " "))) : '';

    //Указываем правила для тега с именем "your-name"
    if ('your-name' == $tag->name) {
        //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
        if ($tag->is_required() && '' == $value) {
            $result->invalidate($tag, 'Укажите имя');
        }
    }

    //Указываем правила для тега с типом "email"
    if ('email' == $tag->basetype) {
        //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
        if ($tag->is_required() && '' == $value) {
            $result->invalidate($tag, 'Укажите верный электронный адрес');
            //Если значение не пустое и не является корректным email-адресом — выводим сообщение об ошибке
        } elseif ('' != $value && !wpcf7_is_email($value)) {
            //Функция "wpcf7_get_message" выводит сообщения с вкладки "Уведомления при отправке формы" настроек формы
            $result->invalidate($tag, wpcf7_get_message('invalid_email'));
        }
    }

    //Указываем правила для тега с типом "tel"
    if ('tel' == $tag->basetype) {
        //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
        if ($tag->is_required() && '' == $value) {
            $result->invalidate($tag, 'Укажите верный телефон');
            //Если значение не пустое и не является корректным телефонным номером — выводим сообщение об ошибке
        } elseif ('' != $value && !wpcf7_is_tel($value)) {
            //Функция "wpcf7_get_message" выводит сообщения с вкладки "Уведомления при отправке формы" настроек формы
            $result->invalidate($tag, wpcf7_get_message('invalid_tel'));
        }
    }
    
    //Указываем правила для тега с именем "your-message"
    if ('your-message' == $tag->name) {
        //Если тег обязателен и имеет пустое значение — выводим сообщение об ошибке
        if ($tag->is_required() && '' == $value) {
            $result->invalidate($tag, 'Введите текст сообщения');
        }
    }

    return $result;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@eugeny_page
Если устраивают дефолтные сообщения, проще проверить через фильтры:
add_filter( 'wpcf7_is_email', 'your_validator', 10, 2 );
add_filter( 'wpcf7_is_url', 'your_validator', 10, 2 );
add_filter( 'wpcf7_is_tel', 'your_validator', 10, 2 );
add_filter( 'wpcf7_is_number', 'your_validator', 10, 2 );
add_filter( 'wpcf7_is_date', 'your_validator', 10, 2 );

Функции обратного вызова передаётся 2 аргумента: (псевдо bool $result, string $field), нужно вернуть $result (1 или false)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы