Проверка на заполнение одного из обязательных полей в Contact Form 7

Одним из самых распространенных плагинов для создания контактных форм или анкет на WordPress является Contact Form 7.

По умолчнию, в данном плагине есть возможность задать одно или более обязательных полей, однако такого функционала не всегда достаточно. К примеру, если вам нужно знать данные только одного из обязательных полей. Давайте приведем пример:
Есть у нас форма обратной связи с такими полями: Имя (обязательное поле), телефон (в настройках CF7 это поле не ставим обязательным) и email (аналогично телефону).
Далее, мы хотим выполнить проверку на зполнение одного из двух полей: телефон или email (т.е.: если заполнено хотяб одно из двух полей - пройдет валидация).
Предполжим, мы задали имена нашим двум полям: для телефона - phone и для электнонной почты - email

В functions.php добавляем следующий сниппет:

add_filter( 'wpcf7_validate', 'wpq_validate' );
function wpq_validate( $result ) {
	$form  = WPCF7_Submission::get_instance();
	$phone  = $form->get_posted_data('phone'); // Имя поля с телефоном
	$email = $form->get_posted_data('email'); // Имя поля с email

	$error_msg = 'Заполните телефон или email';

	if( empty($phone) && empty( $email ) ) {

		 $result->invalidate('phone', $error_msg );
		 $result->invalidate('email', $error_msg );

        } 	

	return $result;
}

Немного разберем код сниппета:
В значение переменной $error_msg мы вносим текст, который будет выводиться, если неодно из наших полей не заполнено.

$phone  = $form->get_posted_data('phone');

Здесь, как мы видим, получаем данные нашего поля phone и заносим его данные в одноименную переменную (называть тем же именем не обязательно) $phone.

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

if( empty($phone) && empty( $email ) )

В данном случае, выполняется такое условие: если поля phone и email пустые - выполнить "что-то". В нашем же сниппете мы выводим сообщение хранящее ся в $error_msg.

Также, мы можем для каждого поля составить свое сообщение. К примеру для незаполненного поля phone мы хотим вывести: "заполните номер телефона". Тогда строка вывода сообщения будет выглядеть так:

$result->invalidate('phone', "заполните номер телефона" );

Данный сниппет тестировался на последних версиях CF7 (на текущий момент это 4.2.2).

Разработка сайтов на WordPress Блог WordPress плагины и хаки Проверка на заполнение одного из обязательных полей в Contact Form 7