Skip to content

Всё для WordPress, веб-разработки — и не только

🚀 Как динамически подставить заголовок страницы в тему письма Contact Form 7

🚀 Как динамически подставить заголовок страницы в тему письма Contact Form 7

На сайте десяток страниц с формой обратной связи, и все письма приходят с одинаковой темой «Сообщение с сайта». Из какого раздела отправил посетитель? С какой страницы услуг? Гадать приходится по тексту письма.

Contact Form 7, стандарт для WordPress-форм: 10+ миллионов активных установок. Но из коробки он не различает, с какой страницы отправлена форма. Тему письма и тело нужно настраивать статически, одна форма на всех страницах выдаёт одно и то же.

Плагин Dynamic Text Extension (DTX) решает это за пять минут без единой строчки PHP. Вы добавляете скрытое поле в форму, оно автоматически подхватывает заголовок страницы, её URL или slug. А в шаблоне письма выводите эту переменную в тему или тело. Дальше, пошаговый разбор настройки с нуля.

💡 Быстрый обзор:

  • Устанавливаете DTX из каталога WordPress.org и активируете рядом с Contact Form 7
  • Добавляете скрытый тег [dynamichidden] с шорткодом CF7_get_post_var в форму
  • Вставляете переменную в тему или тело письма через вкладку «Письмо»
  • Проверяете отправку на двух разных страницах, письма приходят с разными заголовками
  • При необходимости добавляете URL страницы или GET-параметры через тот же механизм

Шаг 1: Установка Dynamic Text Extension

Страница плагина Contact Form 7 Dynamic Text Extension в каталоге WordPress.org

Первым делом, сам плагин. Он бесплатный, лежит в каталоге WordPress.org под названием Contact Form 7, Dynamic Text Extension.

Установка стандартная: Плагины → Добавить новый → в поиске «Dynamic Text Extension» → Установить → Активировать. У вас уже должен быть активен Contact Form 7, DTX расширяет именно его, без CF7 он бесполезен.

Обратите внимание: плагин активно поддерживается. На июнь 2026 года у него 100 000+ активных установок, рейтинг 4,5 на WordPress.org и совместимость с последней версией WordPress. Автор, Крис Мав (Chris Mav), он же делает UberMenu. Плагин не из тех, что брошены после первого релиза.

Шаг 2: Добавление скрытого поля в форму

Теперь настройка внутри Contact Form 7. Откройте нужную форму: Contact → Contact Forms → клик по названию. Вы на вкладке Форма.

Скопируйте этот код и вставьте в тело формы, после основных полей, перед кнопкой отправки:

1[dynamichidden page-title "CF7_get_post_var key='title'"]

Здесь происходит вот что. dynamichidden, это тип поля DTX: оно невидимо для посетителя, но участвует в отправке. page-title, внутреннее имя переменной (произвольное, но осмысленное). Внутри кавычек, шорткод CF7_get_post_var key='title', который дёргает заголовок текущей страницы WordPress через глобальный объект $post.

Если вместо заголовка нужен URL страницы, замените внутренний шорткод на CF7_URL:

1[dynamichidden page-url "CF7_URL"]

А если slug (ярлык), используйте CF7_get_post_var key='slug':

1[dynamichidden page-slug "CF7_get_post_var key='slug'"]

Можно добавить все три поля одновременно, тогда в письме увидите и заголовок, и URL, и slug. Нажмите Сохранить под редактором формы.

Шаг 3: Вывод переменной в шаблон письма

Последний шаг, указать Contact Form 7, куда вставить собранные данные. Перейдите на вкладку Письмо внутри формы.

В поле Тема добавьте имя переменной в квадратных скобках:

1[page-title]

Полностью тема может выглядеть так: Сообщение: [page-title]. Или если вы добавили URL: Заявка со страницы: [page-url].

То же самое работает в поле Тело письма, переменную [page-title] можно вставить в любое место шаблона, до или после основного текста сообщения:

1Страница отправки: [page-title]
2URL: [page-url]
3
4Сообщение:
5[your-message]

Переменные page-title, page-url и page-slug, те самые имена, которые вы задали в тегах [dynamichidden] на предыдущем шаге. Они должны совпадать один в один.

Сохраните форму и протестируйте: откройте две любые страницы сайта с этой формой и отправьте тестовое сообщение с каждой. Письма придут с разными темами, в зависимости от заголовка страницы, на которой был посетитель.

Вариант с GET-параметрами

DTX умеет читать параметры из URL, это полезно, если вы передаёте дополнительную информацию через ссылку. Например, кнопка «Заказать консультацию» на странице тарифа может вести на /contact/?plan=pro. Шорткод для этого:

1[dynamichidden selected-plan "CF7_GET key='plan'"]

А в шаблоне письма, [selected-plan]. Форма сама подставит значение pro из строки запроса.

Этот же приём работает для UTM-меток, идентификаторов кампаний и любых других параметров, которые вы передаёте в URL.

В этом видео автор плагина Крис Мав показывает базовую настройку DTX за три минуты, от установки до первого динамического поля. Если описанные выше шаги вызывают вопросы, посмотрите: все действия показаны на экране в реальном времени.

Что делать, если форма на всех страницах, а заголовки нужны разные

Базовый сценарий, описанный выше, закрывает подавляющее большинство случаев: одна форма, вывод заголовка в тему письма. Но что если у вас десятки страниц и на каждой, своя форма со своим набором полей? Создавать и настраивать DTX для каждой вручную, долго.

Вот три сценария по нарастанию сложности:

  • Одна форма на всех страницах. Идеальный случай для DTX: добавляете скрытое поле один раз, тема письма подхватывает [page-title]. Настройка за пять минут.

  • Несколько разных форм. Настройте DTX в каждой форме отдельно, но копируйте теги между формами через буфер обмена. Скрытое поле с CF7_get_post_var работает одинаково во всех формах.

  • Десятки страниц + A/B-тесты. Если вам нужно не просто различать страницы, а отслеживать конверсии по формам, стоит смотреть в сторону Gravity Forms или WPForms. У них есть встроенная аналитика отправок и маршрутизация уведомлений по условиям. DTX тут не конкурент, он решает конкретную задачу динамических полей и решает её бесплатно.

⁉️🤔 Частые вопросы

Работает ли DTX с последней версией WordPress?

Да, плагин совместим с WordPress 6.7+ и регулярно обновляется. На июнь 2026 года автор выпускает обновления каждые 1-2 месяца, последнее было в мае 2026. Проверьте версию на странице плагина, там всегда указана актуальная совместимость.

Можно ли подставить заголовок не текущей, а конкретной страницы?

CF7_get_post_var берёт данные из глобального объекта $post, той страницы, на которой форма отображается. Чтобы подставить заголовок другой страницы, укажите её ID: CF7_get_post_var key='title' post_id='42'. ID страницы можно посмотреть в админке: Страницы → Все страницы → навести на название, ID отобразится в URL.

Что делать, если переменная не подставляется в письмо?

Проверьте три вещи. Первое: совпадают ли имена, значение атрибута в [dynamichidden имя ...] и переменная [имя] в шаблоне должны быть одинаковыми, включая регистр. Второе: не обёрнут ли шорткод CF7 в кавычки другого типа, внутри двойных кавычек атрибуты DTX должны быть в одинарных ("CF7_get_post_var key='title'"). Третье: активен ли сам Contact Form 7, без него DTX не работает.

Зачем скрытое поле, если можно просто написать заголовок в теме?

Скрытое поле автоматизирует процесс. Если у вас одна форма на десяти страницах, без DTX пришлось бы создавать десять копий формы с разными темами, или вручную менять тему под каждую страницу. DTX делает это за вас: добавили скрытое поле один раз, и тема письма всегда совпадает со страницей отправки.

Можно ли использовать DTX для предзаполнения видимых полей?

Да, замените dynamichidden на dynamictext или dynamicemail. Например, [dynamictext user-name "CF7_get_current_user key='user_nicename'"] предзаполнит поле именем авторизованного пользователя. Посетитель увидит подставленное значение и сможет его изменить перед отправкой.

Плагин конфликтует с кэшированием?

Нет. DTX подставляет значения на стороне сервера при рендеринге страницы, кэш-плагины типа WP Rocket на это не влияют. Если у вас серверное кэширование (Varnish, Nginx FastCGI), убедитесь что страницы с формами исключены из кэша, иначе заголовок может «залипнуть» на первом посетителе.

Начните с первого сценария: установите DTX, добавьте скрытое поле в вашу текущую форму, проверьте письма с двух разных страниц. Девять из десяти сайтов на этом останавливаются, потребности в более сложной логике просто не возникает.