Примите одно из двух полей в контактной форме 7 (PHP / Wordpress) - PullRequest
0 голосов
/ 19 сентября 2018

Я пытался найти эту проблему здесь, в StackOverflow, но ответы, в общем-то, довольно просты, поэтому у меня возникли некоторые проблемы с пониманием, как именно это сделать.

У меня есть контактная форма7 форма с двумя полями: одно для электронной почты с именем your-email и одно для телефона с именем your-telephone.Я хочу, чтобы форма принимала одно из этих полей и делала недействительной, когда оба поля пусты.

Я нашел фрагмент, который не делает именно этого, но, кажется, использует для этого правильный хук, здесь: https://wpquestions.com/Cross_Field_Validation_in_Contact_Form_7/10078

Я преобразовал код в свою цель следующим образом, и он работает наполовину:

add_filter( 'wpcf7_validate', 'wpq_validate' );
function wpq_validate( $result ) {

$email = filter_input( INPUT_POST, 'your-email', FILTER_SANITIZE_STRING );
$telephone = filter_input( INPUT_POST, 'your-telephone', FILTER_SANITIZE_STRING );

$error_msg = 'One of these fields must be entered';

if(  empty($email) && empty($telephone) ) {
$result['valid'] = false;
$result['reason']['your-email'] = $error_msg;
$result['reason']['your-telephone'] = $error_msg;
} 
return $result;

}

Под "наполовину" я имею в виду, что форма не отправляется, когда я покидаю обаполя пустые.Но он не показывает никаких сообщений об ошибках, а загрузочный бланк формы просто вращается бесконечно.Я предполагаю, что в коде есть некоторые вызовы, которые устарели, поскольку код был опубликован в 2014 году.

Так кто-нибудь знает, как мне изменить это в соответствии с текущей версией Контактной формы 7?

1 Ответ

0 голосов
/ 19 сентября 2018

Мне удалось разработать код, вдохновленный более обновленными фрагментами, касающимися фильтра wpcf7_validate.Этот код запрещает отправку формы и отображает два сообщения об ошибках под каждым из двух полей.Это на самом деле не СУХОЙ, и я бы предпочел, чтобы форма показала общую ошибку под всей формой, а не отображала ошибки в каждом поле.Поэтому хотелось бы получить несколько советов от тех, кто знает, как это сделать.

function wpq_validate( $result ) {

$form  = WPCF7_Submission::get_instance();
$email = $form->get_posted_data('your-email');
$telephone = $form->get_posted_data('your-telephone');

if(  empty($email) && empty($telephone) ) {
$result->invalidate('your-email', 'Either one of these fields must be filled. Please try again.' );
$result->invalidate('your-telephone', 'Either one of these fields must be filled. Please try again.' );
} 
return $result;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...