WordPress Plugin Contact Form 7: как удалить 1 поле с проверкой?
Есть 1 настроенная форма с набором обязательных полей, расположенная на 10 страницах.
На некоторых страницах необходимо убрать одно из полей.
При удалении поля скриптом с страницы, форма не отправляется, ругается на то что бы заполнили удаленное поле.
Подскажите возможно ли как то с помощью JS, jQuery удалить поле вместе с проверкой?
Я сформулировал вполне адекватную задачу, решение которой я хотел бы узнать.
Если Вы не знаете где можно применить какое то решение это не означает что это фигня.
А кучу форм любой школьник может на создавать...
WP Panda, Аддон Conditional Fields добавляет собственные шорткоды которые позволяют создавать динамические группы полей и они каким то образом без перезагрузки страницы делают добавление обязательных полей и их скрытие по условию.
Не думаю что разрабы аддона при скрытии или отображении полей каждый раз меняют запись в базе данных, это бы вызывало ошибку при многопользовательском использовании
add_filter( 'wpcf7_validate', 'wpp_logic_for_skip_cf7_validate_in_posts', 2, 2 );
function wpp_logic_for_skip_cf7_validate_in_posts( $result, $tags ) {
$return = new WPCF7_Validation();
$invalid_fields = $result->get_invalid_fields();
/**
* Массив с полями не обязавтельными к проверке в определенных постах
* ключь - id поста в котором валидация не обязательна
* значения - тег(имя) поля которое не надо проверять
*/
// TODO: Вот тут некисло было бы сделать фильтром например $logic_for_skip = apply_filters( 'wpp_fr_cf7_skip_fields_array', [] ); так будет сильно удобнее настраивать, но для примера покатит и так
$logic_for_skip = [
4 => [
'your-name',
'your-message'
],
602 => [
'your-message'
]
];
// TODO: Этот кусок я бы не тянул в продакшен, так как значение скрытого поля _wpcf7_container_post легко подменить но queried_object тут не возвращает ID ибо, то-что было интересно я решил и валидация пропускается.
$current_id = (int)$_REQUEST[ '_wpcf7_container_post' ];
// если ошибок нет, то нихрена не делаем
if ( !is_array( $invalid_fields ) || count( $invalid_fields ) == 0 )
return $result;
//если ошибки есть, то смотрим в каких полях и если их надо пропустить пропускаем
foreach ( $invalid_fields as $invalid_field_key => $invalid_field_data ) {
if ( empty( $logic_for_skip[ $current_id ] ) || !in_array( $invalid_field_key, $logic_for_skip[ $current_id ] ) ) {
$return->invalidate( $invalid_field_key, $invalid_field_data[ 'reason' ] );
}
}
return $return;
}
Оно рабочее, но для нормального продакшена требует доработки
WP Panda, получается можно данную конструкцию использовать в евенте wpcf7submit или wpcf7beforesubmit как раз там перехватить поля и снять проверку))
Спасибо! Добрый человек) Пойду эксперементировать
Андрей Кирин, не надо ее нигде ее использовать и никуда цеплять, это уже решение самодостаточное. просто добавьте в functions.php и задайте свой массив с настройками