Задать вопрос
@Lawyer-u
Изучаю сайты на WP.

Как настроить ограничение по количеству отправки с Contact Form 7 для одного пользователя?

На сайте https://cgp24.ru/yurist-vozvrat-avtomobilya/ есть заказ звонка в первом экране и popap. можно ли как-то настроить ограничение отправки с формы для одного пользовтеля не более 1 раза? А то иногда по 4-5 раз отправляют заявку, а деньги в Директ списываются как за новые конверсии.

Плагин WPAppsDev — CF7 Form Submission Limit не подходит, так как на сколько я понял при настройке нужно чтобы пользователь был авторизирован на сайте.
  • Вопрос задан
  • 50 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
как то так
со сменой браузера или IP отправит еще раз конечно, но рядовой юзер теоретически отправить не сможет, для большего контроля можно добавить fingerprint
ну и опцию можно одну , и по ней искать, но направление вам дал, дальше уже доработаете
// Хуки для Contact Form 7
add_action('wpcf7_before_send_mail', 'wpp_limit_cf7_submissions');
add_filter('wpcf7_display_message', 'wpp_block_cf7_form_display', 10, 2);

function wpp_limit_cf7_submissions($contact_form) {
	$form_id = $contact_form->id();
	$user_ip = $_SERVER['REMOTE_ADDR'];
	$user_agent = $_SERVER['HTTP_USER_AGENT'];

	// Создаем уникальный ключ для пользователя
	$user_key = md5($user_ip . $user_agent);
	$option_key = 'cf7_submission_' . $form_id . '_' . $user_key;

	// Проверяем, отправлял ли пользователь форму за последние 24 часа
	$last_submission = get_option($option_key);
	$current_time = time();

	if ($last_submission && ($current_time - $last_submission) < 86400) { // 24 часа
		// Блокируем отправку
		$submission = WPCF7_Submission::get_instance();
		if ($submission) {
			$submission->add_status('aborted', 'Вы уже отправляли заявку. Пожалуйста, подождите 24 часа.');
		}
		return false;
	}

	// Записываем время отправки
	update_option($option_key, $current_time, false);
	return $contact_form;
}

function wpp_block_cf7_form_display($message, $status) {
	if ($status === 'aborted') {
		return 'Вы уже отправляли заявку. Пожалуйста, подождите 24 часа перед повторной отправкой.';
	}
	return $message;
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы