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, додайте приховане поле у вашу поточну форму, перевірте листи з двох різних сторінок. Дев'ять із десяти сайтів на цьому зупиняються, потреби в складнішій логіці просто не виникає.