Проблема: как автоматически подставить данные пользователя в поля 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
- Откройте настройки нужного поля (например, Email).
- В разделе «Дополнительно» включите «Динамическое значение».
- В поле ключа укажите
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, данные не сохраняются между устройствами | Написать скрипт, который на событии загрузки подставляет значения в поля |
| Использование плагинов автозаполнения | Готовое решение, простой интерфейс | Может быть дорогостоящим, не всегда гибко | Плагины для автозаполнения форм |