Автозаполнение в браузере удобно до тех пор, пока оно не начинает мешать. В WPForms это чаще всего проявляется в двух сценариях: браузер подставляет старые значения в поля, которые должны быть пустыми, или автозаполнение ломает UX в формах с адресом, телефоном, e-mail и полями оплаты. Если форма собирает заявки, заказы или данные для интеграции, такие подстановки лучше контролировать явно.
Ниже разберём, как отключить автозаполнение точечно, без ломки валидации и без лишних костылей. Сразу оговорка: полностью запретить браузеру запоминать всё на стороне пользователя нельзя. Но можно заметно снизить вероятность подстановки и убрать конфликтные поля из автозаполнения.
Когда автозаполнение действительно мешает
Проблема обычно видна без дебага: пользователь открывает форму, а в полях уже стоят имя, телефон, e-mail или даже случайные значения из другой страницы. Это особенно неприятно, если:
- форма используется для повторных заявок и данные должны вводиться заново;
- в форме есть скрытые или зависимые поля, которые браузер заполняет не туда;
- на странице несколько форм, и браузер путает одинаковые
nameилиid; - в WooCommerce- или CRM-сценариях автозаполнение приводит к отправке устаревших данных.
Что проверить до правок
Сначала убедитесь, что проблема именно в автозаполнении браузера, а не в кэше, плагине подстановки данных или сохранённых черновиках. Для быстрой диагностики откройте страницу в приватном окне, затем в другом браузере. Если поля пустые в инкогнито, но заполняются в обычном окне, источник почти наверняка в автозаполнении браузера.
- проверьте форму без кэша и без расширений браузера;
- посмотрите HTML полей через DevTools: одинаковые
nameиidусиливают путаницу; - сравните поведение в Chrome, Safari и Firefox — они по-разному относятся к
autocomplete; - убедитесь, что проблема не вызвана скриптом, который сам подставляет значения после загрузки.
Как отключить автозаполнение в WPForms точечно
У WPForms нет универсальной кнопки «выключить автозаполнение для всех полей» на уровне формы, поэтому на практике используют HTML-атрибут autocomplete. Самый надёжный вариант — задать его для конкретных полей через фильтр и при необходимости добавить собственный атрибут на контейнер формы.
Если вам нужно отключить автозаполнение только для чувствительных полей, лучше не трогать всю форму целиком. Например, имя и e-mail можно оставить с подсказками браузера, а телефон, комментарий и внутренние идентификаторы — отключить.
<?php
/**
* Отключаем автозаполнение у конкретных полей WPForms.
*
* Подходит для functions.php дочерней темы или собственного плагина.
*/
add_filter( 'wpforms_field_properties', function( $properties, $field, $form_data ) {
if ( empty( $form_data['id'] ) ) {
return $properties;
}
// Замените 123 на ID нужной формы.
if ( (int) $form_data['id'] !== 123 ) {
return $properties;
}
// Пример: отключаем автозаполнение у текстовых полей и телефона.
if ( in_array( $field['type'], array( 'name', 'email', 'phone', 'text' ), true ) ) {
$properties['inputs']['primary']['attr']['autocomplete'] = 'off';
}
return $properties;
}, 10, 3 );Этот вариант работает, если WPForms рендерит поле через стандартные свойства. Но у браузеров есть привычка игнорировать autocomplete="off" для некоторых типов полей, особенно если они считают форму «похожей на адресную» или «логин-форму». Поэтому для проблемных случаев нужен более жёсткий подход.
Более надёжный вариант: нестандартные значения autocomplete
Для некоторых полей лучше использовать не просто off, а значения, которые не провоцируют браузер на подстановку. Например, для телефона можно задать autocomplete="new-password" или оставить off в сочетании с уникальными именами полей. Это не магия, а практический способ снизить вероятность автоподстановки в Chrome и Safari.
<?php
add_filter( 'wpforms_field_properties', function( $properties, $field, $form_data ) {
if ( empty( $form_data['id'] ) || (int) $form_data['id'] !== 123 ) {
return $properties;
}
if ( $field['type'] === 'phone' ) {
$properties['inputs']['primary']['attr']['autocomplete'] = 'new-password';
}
if ( $field['type'] === 'email' ) {
$properties['inputs']['primary']['attr']['autocomplete'] = 'off';
}
return $properties;
}, 10, 3 );Если в вашей форме есть несколько однотипных полей, например два e-mail или два телефона, обязательно проверьте, что у каждого поля уникальные настройки и нет одинаковых HTML-идентификаторов после кастомных правок шаблона.
Сравнение подходов: плагин, код или правка шаблона
В реальных проектах чаще всего выбирают один из трёх путей. Ниже — короткое сравнение без иллюзий про «универсальное решение».
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Код через фильтр WPForms | Нужно отключить автозаполнение в одной или нескольких формах | Точечно, без лишних зависимостей | Нужно править код и знать ID формы |
| Правка HTML/шаблона темы | Форма встроена в кастомный шаблон и есть доступ к разметке | Можно контролировать атрибуты на уровне HTML | Легко сломать обновлениями темы или плагина |
| Дополнительный плагин для UX | Нужно решить не только autocomplete, но и другие проблемы формы | Быстро внедрить | Риск лишней нагрузки и конфликтов |
Если задача только в автозаполнении, код обычно надёжнее и легче поддерживается. Плагин имеет смысл, когда вы одновременно решаете кучу смежных задач: маски, подсказки, условную логику, защиту от спама и т. п.
Пошаговая настройка без лишних побочных эффектов
Шаг 1. Найдите ID формы
Откройте форму в админке WPForms и посмотрите её ID в списке форм или в шорткоде. Именно по нему удобнее ограничивать изменения одной формой, а не ломать поведение всех форм на сайте.
Шаг 2. Определите проблемные поля
Не отключайте автозаполнение везде подряд. Обычно достаточно убрать его у:
- телефона;
- e-mail;
- адреса;
- комментария или сообщения;
- скрытых полей, если они участвуют в логике отправки.
Шаг 3. Добавьте код в дочернюю тему или мини-плагин
Лучше не вставлять такой код в основной файл темы, если сайт активно обновляется. Для рабочей среды безопаснее использовать дочернюю тему или небольшой собственный плагин.
<?php
/**
* Пример: отключаем автозаполнение у формы с ID 123 и добавляем подсказку браузеру.
*/
add_filter( 'wpforms_field_properties', function( $properties, $field, $form_data ) {
if ( empty( $form_data['id'] ) || (int) $form_data['id'] !== 123 ) {
return $properties;
}
$disable_for = array( 'phone', 'email', 'text' );
if ( in_array( $field['type'], $disable_for, true ) ) {
$properties['inputs']['primary']['attr']['autocomplete'] = 'off';
$properties['inputs']['primary']['attr']['autocapitalize'] = 'off';
$properties['inputs']['primary']['attr']['autocorrect'] = 'off';
}
return $properties;
}, 10, 3 );Шаг 4. Проверьте фронтенд в реальном браузере
После внедрения откройте страницу в обычном окне браузера, а затем в приватном. Если поля больше не подхватывают старые значения, задача решена. Если автозаполнение осталось только в одном браузере, это уже вопрос его политики, а не WPForms.
Как проверить, что решение сработало
Проверка должна быть не формальной, а прикладной. Просто увидеть пустое поле недостаточно — важно убедиться, что форма ведёт себя стабильно на повторных открытиях страницы.
- откройте страницу после перезагрузки и после перехода по внутренней ссылке;
- проверьте форму в обычном окне и в приватном режиме;
- введите тестовые данные, отправьте форму, затем откройте её снова;
- посмотрите исходный HTML: у нужных полей должен быть атрибут
autocomplete; - убедитесь, что валидация WPForms не сломалась и сообщения об ошибках отображаются как раньше.
Если форма отправляется через AJAX, проверьте ещё и повторную отправку без перезагрузки страницы. Иногда браузер подставляет значения после успешного сабмита, и это видно только в таком сценарии.
Частые ошибки и как их исправить
Отключили autocomplete, но браузер всё равно заполняет поля
Это нормальная ситуация для некоторых браузеров. Они могут игнорировать autocomplete="off" для полей, которые считают важными для пользователя. В таком случае помогает комбинация: уникальные name, отключение только на проблемных полях и проверка на уровне всей формы.
Сломалась валидация или маска телефона
Часто причина в том, что вместе с autocomplete случайно изменили другие атрибуты поля или подключили скрипт, который перезаписывает значение после рендера. Проверьте, не конфликтует ли код с маской телефона, условной логикой или сторонним JS.
Автозаполнение стало хуже только в одном браузере
У Chrome, Safari и Firefox разные правила. Если проблема проявляется только в одном из них, не пытайтесь «лечить» весь сайт. Сначала проверьте, не слишком ли похожи поля на стандартные поля логина или адреса, и не используются ли одинаковые названия полей на нескольких формах.
Код работает в админке, но не на сайте
Так бывает, если код добавили не туда или форма рендерится из кэша. Проверьте, что сниппет загружается на фронтенде, очистите кэш страницы и, если нужно, исключите страницу с формой из агрессивного кэширования.
Безопасность и производительность
Отключение автозаполнения само по себе не делает форму безопаснее. Если в форме есть персональные данные, лучше дополнительно проверить, не сохраняются ли они в логах, письмах и сторонних интеграциях без необходимости. Для чувствительных полей полезно ограничить доступ к админке, включить нормальную SMTP-доставку и не хранить лишнее в уведомлениях.
С точки зрения производительности этот сценарий почти бесплатный, если вы используете один фильтр и не добавляете тяжёлые скрипты. Не стоит подключать отдельный плагин только ради одного атрибута HTML: это лишняя точка отказа и ещё один источник конфликтов при обновлениях.
Если у вас много форм и часть из них должна вести себя по-разному, держите настройки в одном мини-плагине или в отдельном файле с понятными комментариями. Так проще сопровождать сайт и быстрее находить причину, если автозаполнение снова начнёт мешать после обновления WPForms или темы.