как то так
со сменой браузера или 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;
}