Когда на сайте несколько форм Contact Form 7, стандартное сообщение после отправки быстро становится проблемой: пользователи видят один и тот же текст, а вы не можете нормально разделить сценарии «заявка», «вопрос», «заказ звонка» или «подписка». Обычно это всплывает после запуска лендинга, когда маркетинг просит разные подтверждения для разных форм, а в админке CF7 нет отдельного поля для уникального success message на каждую форму.
Решается это без тяжёлых плагинов: через фильтр wpcf7_messages можно подменять текст подтверждения в зависимости от ID формы. Для этого не нужно ломать шаблоны темы и не нужно править сам плагин.
Когда стандартного сообщения Contact Form 7 уже недостаточно
Одинаковый текст после отправки формы мешает в трёх типичных сценариях:
- на одной странице стоят несколько форм, и пользователь не понимает, какая именно отправилась;
- нужно показать разный следующий шаг: «мы перезвоним», «проверьте почту», «заявка принята в работу»;
- контент-менеджер хочет менять текст без правки шаблонов и без риска сломать разметку.
Если форма одна, можно жить и со стандартным сообщением. Но как только форм становится несколько, лучше привязать текст к конкретной форме или к конкретному сценарию.
Диагностика: что именно нужно менять
Сначала проверьте, где формируется сообщение. В Contact Form 7 есть два разных уровня:
- текст, который видит пользователь после успешной отправки;
- текст, который приходит в письмо или уходит в CRM через интеграцию.
В этой статье речь именно о первом случае. Если проблема в письмах, это уже другая задача: там нужно смотреть mail-схему, SMTP и обработку отправки.
Чтобы не гадать, откройте нужную форму в админке и запишите её ID. Его можно увидеть в списке форм или в шорткоде вида [contact-form-7 id="123" title="Обратная связь"]. Именно по этому ID удобно различать сообщения.
Рабочее решение через фильтр wpcf7_messages
Самый надёжный вариант — добавить код в functions.php дочерней темы или в небольшой mu-plugin. Так вы не потеряете правку после обновления темы.
Пример: разные тексты для двух форм
<?php
add_filter( 'wpcf7_messages', function( $messages ) {
if ( ! function_exists( 'wpcf7_get_current_contact_form' ) ) {
return $messages;
}
$form = wpcf7_get_current_contact_form();
if ( ! $form ) {
return $messages;
}
$form_id = (int) $form->id();
if ( 123 === $form_id ) {
$messages['mail_sent_ok'] = array(
'description' => 'Форма заявки на консультацию',
'default' => 'Спасибо! Ваша заявка отправлена. Мы свяжемся с вами в ближайшее время.',
);
}
if ( 456 === $form_id ) {
$messages['mail_sent_ok'] = array(
'description' => 'Форма вопроса в поддержку',
'default' => 'Сообщение отправлено. Ответ придёт на указанную почту, если вы её оставили.',
);
}
return $messages;
} );Здесь мы меняем именно сообщение mail_sent_ok — то, что показывается при успешной отправке. Для разных форм задаются разные тексты, а логика остаётся в одном месте.
Если нужен не только текст, но и отдельный следующий шаг
Иногда после отправки формы нужно не просто показать сообщение, а ещё и направить пользователя на отдельную страницу благодарности. В таком случае лучше не перегружать success message, а использовать редирект через JavaScript или отдельную логику обработки события CF7. Но если задача только в тексте, фильтра достаточно.
Альтернативы: плагин, код или шаблон страницы
| Подход | Плюсы | Минусы |
|---|---|---|
Код через wpcf7_messages | Без лишних зависимостей, гибко, работает точечно | Нужен доступ к коду и базовая дисциплина при обновлениях |
| Отдельный плагин для кастомизации CF7 | Удобно для редактора, меньше ручной работы | Дополнительный слой, возможны конфликты и лишние настройки |
| Одинаковый текст для всех форм | Самый простой вариант | Путает пользователей, плохо масштабируется |
Если у вас одна-две формы и нужен только разный текст, код обычно проще и чище. Плагин имеет смысл, когда правки должны делать не разработчики.
Пошаговая настройка без лишних рисков
- Определите ID каждой формы Contact Form 7.
- Добавьте код в дочернюю тему или mu-plugin.
- Задайте отдельный текст для нужных ID.
- Очистите кэш, если на сайте есть кеширование страниц.
- Проверьте отправку каждой формы в браузере без автозаполнения и без блокировщиков.
Если вы используете кэш на уровне сервера или плагина, не забудьте проверить страницу в режиме инкогнито. Иногда кажется, что сообщение не поменялось, хотя на самом деле вы видите старую версию страницы из кэша.
Как проверить, что решение сработало
Проверка должна быть не формальной, а по сценарию:
- отправьте форму с ID 123 и убедитесь, что показывается именно её текст;
- отправьте форму с ID 456 и проверьте другой текст;
- посмотрите, не сломалась ли валидация полей и не исчезло ли стандартное сообщение об ошибке;
- проверьте мобильную версию, если сообщение выводится в узком контейнере;
- сравните поведение на страницах с кэшем и без него.
Если текст не меняется, чаще всего причина в том, что код добавлен не туда, где он реально загружается, или в том, что тема/плагин переопределяет вывод сообщения своим скриптом.
Частые ошибки и как их исправить
Ошибка: код добавили в родительскую тему
После обновления темы правка исчезнет. Для таких изменений используйте дочернюю тему или mu-plugin.
Ошибка: перепутали ID формы
Визуально формы могут выглядеть одинаково, но ID у них разные. Сверяйте его в шорткоде или в списке форм в админке.
Ошибка: меняют не тот ключ сообщения
Для успеха нужен ключ mail_sent_ok. Если править другой элемент массива, пользователь ничего не увидит.
Ошибка: ожидают, что это изменит письмо
Этот фильтр отвечает за текст на экране после отправки. Письмо и текст в письме настраиваются отдельно.
Что учесть по безопасности и производительности
Сам код лёгкий и не создаёт заметной нагрузки. Но есть несколько практических моментов:
- не вставляйте код в случайные сниппет-плагины без понимания, как они переживают обновления;
- не дублируйте одну и ту же логику в нескольких местах;
- если форма используется на высоконагруженной странице, держите код коротким и без лишних запросов к базе;
- не выводите в сообщение персональные данные или внутренние детали обработки заявки.
Если вам нужно не только разное сообщение, но и разная логика для нескольких форм, лучше вынести это в отдельный мини-плагин. Так проще сопровождать код и не зависеть от темы.
Когда лучше не ограничиваться сообщением
Если задача шире, чем просто текст подтверждения, посмотрите на сценарий целиком. Иногда пользователю нужен не success message, а отдельная страница спасибо, письмо с подтверждением, редирект в CRM или показ дополнительного блока с инструкцией. В таких случаях одна строка в сообщении уже не решает проблему полностью.
Но если нужно именно разделить тексты для разных форм Contact Form 7, фильтр wpcf7_messages остаётся самым прямым и проверяемым способом без лишней зависимости от сторонних решений.