К форме бронирования, созданной с помощью плагина Contact Form 7 потребовалось добавить логику. Есть два поля с типом число. В одном поле указывается количество взрослых, в другом – детей. Общее количество гостей не может быть более 15. И конечно дети не могут приехать сами по себе – требуется как минимум один взрослый сопровождающий.
Изучив пример кастомной валидации для CF7 https://contactform7.com/2015/03/28/custom-validation/ написали следующий код:
/*кастомная валидация формы*/
add_filter( 'wpcf7_validate_number*', 'custom_number_confirmation_validation_filter', 20, 2 );
function custom_number_confirmation_validation_filter( $result, $tag ) {
if ( 'number-540' == $tag->name ) {
$number_540 = isset( $_POST['number-540'] ) ? intval( $_POST['number-540'] ) : 0;
$number_568 = isset( $_POST['number-568'] ) ? intval( $_POST['number-568'] ) : 0;
if ( $number_540 < 1 || ( $number_540 + $number_568 ) > 15 ) {//условие вывода ошибки, поле количество взрослых меньше 1 или сумма по обоим полям больше 15
$result->invalidate( $tag, "Общее количество детей и взрослых не должно быть более 15. В группе должен быть как минимум 1 взрослый." );//Здесь указывается сообщение если поля заполнены не корректно
}
}
return $result;
}
Обращаем внимание, что wpcf7_validate_number* в конце со звездочкой в нашем случае добавляется _number, если поле не числовое, то добавляется соответствующий тип поля.
number-540 и number-568 значения атрибута data-name из тегов формы:
Количество взрослых [number* number-540]
Количество детей [number number-568]
Названия переменных $number_540 и $number_568 для наглядности через подчеркивание.
Код размещаем в файле functions.php активной темы.