wpforms.ru wordpress WPForms.ru

Автоматическая подстановка данных пользователя в форму по cookie

Проблема: как автоматически подставить данные пользователя в поля WPForms на основе cookie

Частая задача — при повторном посещении сайта или при авторизации подставлять в форму WPForms ранее сохранённые данные пользователя (например, email, имя) для удобства и ускорения заполнения. WPForms не поддерживает это из коробки, но мы можем реализовать автоматическую подстановку через фильтры и работу с cookie.

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

Проверьте, что в форме есть поля, в которые нужно подставлять значения (например, поле email с ID 1, имя с ID 2). Также убедитесь, что cookie с нужными данными действительно устанавливаются и доступны на стороне клиента.

Для проверки cookie откройте консоль браузера (F12) во вкладке Application — Cookies и убедитесь, что нужные значения присутствуют.

Пошаговое решение: подстановка данных из cookie в поля формы WPForms

1. Установка cookie с данными пользователя

Пример кода для установки cookie при заполнении формы (вы можете адаптировать под свои нужды):

add_action('wp_enqueue_scripts', function() {
    if( is_user_logged_in() ) {
        $current_user = wp_get_current_user();
        $email = $current_user->user_email;
        $name = $current_user->display_name;
        echo "<script>
        document.cookie = 'wp_user_email=' + encodeURIComponent('" . esc_js($email) . "') + '; path=/';
        document.cookie = 'wp_user_name=' + encodeURIComponent('" . esc_js($name) . "') + '; path=/';
        </script>";
    }
});

Этот код добавляет JS, который устанавливает cookie с email и именем текущего пользователя. Если у вас другая логика — адаптируйте.

2. Подстановка значений в поля WPForms через фильтр wpforms_field_value_{$field_key}

WPForms позволяет динамически задавать значения полей через фильтры с префиксом wpforms_field_value_. В нашем случае используем PHP для чтения cookie и передачи значения.

add_filter('wpforms_field_value_email', 'fill_field_from_cookie_email');
function fill_field_from_cookie_email($value) {
    if( isset($_COOKIE['wp_user_email']) ) {
        return sanitize_email(urldecode($_COOKIE['wp_user_email']));
    }
    return $value;
}

add_filter('wpforms_field_value_name', 'fill_field_from_cookie_name');
function fill_field_from_cookie_name($value) {
    if( isset($_COOKIE['wp_user_name']) ) {
        return sanitize_text_field(urldecode($_COOKIE['wp_user_name']));
    }
    return $value;
}

Здесь email и name — ключи полей, которые вы указываете в настройках WPForms как «Динамическое значение» (Dynamic Field Value).

3. Настройка формы WPForms

  1. Откройте настройки нужного поля (например, Email).
  2. В разделе «Дополнительно» включите «Динамическое значение».
  3. В поле ключа укажите email для email, name для имени.

Это позволит фильтрам из кода подставлять значения автоматически.

Проверка результата

  • Очистите cookie для вашего сайта в браузере.
  • Зайдите на сайт, авторизуйтесь (если используется авторизация).
  • Откройте страницу с формой WPForms.
  • Проверьте, что поля email и имя автоматически заполнены значениями из cookie.
  • Если поля пустые — проверьте консоль браузера на ошибки, а также наличие cookie через Application -> Cookies.

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

  • Нет значений в полях: убедитесь, что cookie действительно установлены и доступны в PHP ($_COOKIE). Для этого выведите print_r($_COOKIE) временно.
  • Неверные ключи динамических значений: ключи должны совпадать с фильтрами wpforms_field_value_{$key} и быть указаны в настройках полей формы.
  • Проблемы с кодировкой cookie: используйте encodeURIComponent в JS и urldecode в PHP для безопасной передачи.
  • Кэширование страниц: кэш может мешать обновлению значений cookie. Используйте исключения для страниц с формой или отключите кэширование.

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

  • Не храните в cookie конфиденциальные или большие данные — только идентификаторы или публичные поля.
  • Используйте sanitize_email и sanitize_text_field для очистки данных из cookie перед выводом.
  • Обрабатывайте отсутствие cookie корректно, чтобы не ломать форму.
  • Если форма доступна анонимным пользователям, подумайте о fallback-логике (например, локальное хранилище через JS).
  • Минимизируйте JS-скрипты для установки cookie, чтобы не замедлять загрузку страницы.

Сравнение вариантов реализации подстановки данных в WPForms

СпособПлюсыМинусыПример
PHP + фильтры WPForms + cookieПростая реализация, работает на сервере, не зависит от JSЗависит от наличия cookie, возможны проблемы с кэшированиемКод из статьи
JS подстановка из localStorage/sessionStorageРаботает без серверных настроек, подходит для анонимных пользователейЗависит от включенного JS, данные не сохраняются между устройствамиНаписать скрипт, который на событии загрузки подставляет значения в поля
Использование плагинов автозаполненияГотовое решение, простой интерфейсМожет быть дорогостоящим, не всегда гибкоПлагины для автозаполнения форм
×
-15%
на премиум плагин
Clearfy

Защитите сайт!

Включить Clearfy »