WPForms: как избежать повторной отправки формы при обновлении страницы в WordPress

Проблема: повторная отправка формы при обновлении страницы

При работе с WPForms в WordPress часто встречается ситуация, когда пользователь после успешной отправки формы обновляет страницу браузера (F5 или Ctrl+R), и форма повторно отправляется. Это приводит к дублированию данных, ошибкам в базе и неудобствам для пользователей и администраторов.

Диагностика проблемы

Первый шаг — убедиться, что именно при обновлении страницы происходит повторная отправка формы. Для этого:

  • Отправьте форму и обратите внимание на URL после отправки.
  • Обновите страницу в браузере и проверьте, появляется ли повторное сообщение об отправке.
  • Просмотрите базу данных или email-уведомления — дублируются ли записи.

Повторная отправка возникает из-за того, что форма отправляется методом POST, а при обновлении браузер пытается повторить последний POST-запрос.

Пошаговое решение: реализуем Post/Redirect/Get (PRG) паттерн для WPForms

Идея решения — после успешной отправки формы сделать редирект на другую страницу или на ту же, но с GET-запросом. Это предотвратит повторную отправку при обновлении.

Шаг 1. Создайте дочернюю тему или используйте файл functions.php

Вставьте следующий код в functions.php вашей активной темы или в плагин кастомных функций:

add_action('wpforms_process_complete', 'wpforms_prg_redirect', 10, 4);
function wpforms_prg_redirect($fields, $entry, $form_data, $entry_id) {
    // ID формы, для которой применяем редирект
    $target_form_id = 123; // Замените на ID вашей формы

    if ($form_data['id'] == $target_form_id) {
        // URL для редиректа после отправки
        $redirect_url = add_query_arg('wpforms_submitted', '1', get_permalink());
        wp_safe_redirect($redirect_url);
        exit;
    }
}

Этот код срабатывает после успешной отправки формы с ID 123 и перенаправляет пользователя на ту же страницу с параметром wpforms_submitted=1.

Шаг 2. Обработка сообщения об успешной отправке

Чтобы не показывать форму повторно с параметром wpforms_submitted, добавьте проверку и вывод сообщения:

add_shortcode('wpforms_prg', function($atts) {
    $form_id = isset($atts['id']) ? intval($atts['id']) : 0;
    if (!$form_id) return 'Не указан ID формы.';

    if (isset($_GET['wpforms_submitted']) && $_GET['wpforms_submitted'] == '1') {
        return '<div class="wpforms-success">Спасибо, ваша форма успешно отправлена.</div>';
    }

    return do_shortcode('[wpforms id="' . $form_id . '"]');
});

Используйте шорткод [wpforms_prg id="123"] в контенте страницы вместо обычного шорткода WPForms. Таким образом, после редиректа пользователю покажется сообщение, а повторная отправка не произойдет.

Проверка результата после внедрения

  • Отправьте форму на странице с новым шорткодом.
  • После отправки произойдет редирект на ту же страницу с параметром ?wpforms_submitted=1.
  • Появится сообщение об успешной отправке.
  • Обновите страницу браузера — форма не отправится повторно, так как запрос теперь GET.

Частые ошибки и как их исправить

  • Редирект не работает (белый экран или ошибка): Проверьте, что вызов wp_safe_redirect() происходит до вывода любого контента. Код должен быть в functions.php или плагине, без пробелов и вывода до редиректа.
  • ID формы указан неверно: Убедитесь, что $target_form_id совпадает с ID вашей формы WPForms.
  • Параметр wpforms_submitted конфликтует с другими параметрами страницы: можно изменить имя параметра, например, на form_sent, и поправить код соответственно.

Практические советы по безопасности и производительности

  • Используйте wp_safe_redirect() вместо wp_redirect() для безопасности редиректа.
  • Не храните состояние отправки формы в сессиях или куках — это усложняет логику и может вызвать ошибки.
  • Если у вас несколько форм на странице, реализуйте редирект для каждой через проверку ID формы.
  • Для многошаговых форм PRG паттерн нужно настраивать с учётом логики переходов между шагами.

Сравнение вариантов решения

СпособПлюсыМинусы
Использование PRG с редиректомНадежно предотвращает повторную отправку; прост в реализации; совместим с WPFormsТребует изменения шаблона (шорткода); дополнительный HTTP-запрос
AJAX-отправка формы с блокировкой кнопкиНет перезагрузки страницы; мгновенная реакцияСложнее реализовать; не всегда устраняет проблему при обновлении страницы полностью
Использование сессий/куковМожно хранить состояниеУвеличивает нагрузку; сложно настроить корректно; возможны ошибки
WPForms и отправка данных форм в Google Sheets: практическое руководство
02.03.2026
WPForms: как избежать повторной отправки формы при обновлении страницы в WordPress
28.04.2026
WPForms: динамические поля с внешней логикой на примере кастомных условий
03.04.2026
Как создать форму опроса с условиями в WordPress с WPForms
06.03.2026
WPForms и пользовательские метаданные: автоматизация обработки форм в WordPress
16.01.2026