Как автоматически подтягивать имя поста в CF7 и отправлять его на почту?
Всем привет!
Есть код который в цикле выводит записи на страницу
<div class="masterclass__list"> <?php $myposts = get_posts( array( 'numberposts' => -1, 'post_type' => 'masterclass', 'category' => 18 ) ); foreach( $myposts as $post ){ setup_postdata( $post ); ?> <div class="masterclass__item"> <div class="masterclass__img"> <img src="<?php the_field('masterclass_img'); ?>" alt=""> </div> <div class="masterclass__content"> <div class="masterclass__age"><?php the_field('masterclass_age'); ?></div> <h3 class="masterclass__subtitle subtitle"><?php the_field('masterclass_subtitle'); ?></h3> <p class="masterclass__text"><?php the_field('masterclass_text'); ?></p> <div class="masterclass__order"> <a class="masterclass__btn btn open-form-popup" href="#form-popup">Booking</a> <div class="masterclass__price"><span class="subtitle-small"><?php the_field('masterclass_price_num'); ?> </span><?php the_field('masterclass_price_rule'); ?></div> </div> </div> </div> <div id="form-popup" class="form-popup__bg popup__bg"> <div class="form-popup popup"> <p class="form-popup__title popup__title title"><?php the_field('form_popup_title'); ?></p> <button class="form-popup__close popup__close" type="button"> <span class="visually-hidden">Закрити форму зворотнього зв'язку</span> </button> <?php echo do_shortcode('[contact-form-7 id="111" title="Popup"]')?> </div> </div> <?php } wp_reset_postdata(); ?> </div> |
<div class="masterclass__list"> <?php $myposts = get_posts( array( 'numberposts' => -1, 'post_type' => 'masterclass', 'category' => 18 ) ); foreach( $myposts as $post ){ setup_postdata( $post ); ?> <div class="masterclass__item"> <div class="masterclass__img"> <img src="<?php the_field('masterclass_img'); ?>" alt=""> </div> <div class="masterclass__content"> <div class="masterclass__age"><?php the_field('masterclass_age'); ?></div> <h3 class="masterclass__subtitle subtitle"><?php the_field('masterclass_subtitle'); ?></h3> <p class="masterclass__text"><?php the_field('masterclass_text'); ?></p> <div class="masterclass__order"> <a class="masterclass__btn btn open-form-popup" href="#form-popup">Booking</a> <div class="masterclass__price"><span class="subtitle-small"><?php the_field('masterclass_price_num'); ?> </span><?php the_field('masterclass_price_rule'); ?></div> </div> </div> </div> <div id="form-popup" class="form-popup__bg popup__bg"> <div class="form-popup popup"> <p class="form-popup__title popup__title title"><?php the_field('form_popup_title'); ?></p> <button class="form-popup__close popup__close" type="button"> <span class="visually-hidden">Закрити форму зворотнього зв'язку</span> </button> <?php echo do_shortcode('[contact-form-7 id="111" title="Popup"]')?> </div> </div> <?php } wp_reset_postdata(); ?> </div>
В каждой записи есть кнопка, которая открывает попап-форму.
Использую плагин Contact Form 7 для попап-формы.
Я хочу чтобы на почту в письмо вместе с данными которые заполняет пользователь автоматически подтягивалось название записи, с которой была отправлено заявка.
Чтобы можно было идентифицировать, какая именно запись (в моем случае это мастер-класс) заинтересовал пользователя.
Подскажите, пожалуйста, как это реализовать?
Дополнительно:
https://contactform7.com/special-mail-tags/
[_post_title] [_post_name] и все что начинается с _post возвращает пустые значения в письме.
но [_url] [_site_title] и тд работает
Через JS можно, находишь на странице заголовок, как правило h1 и добавляешь его в значение inputa(можно даже скрытого)
- Через JS получилось решить задачу буквально за 1-2 часа. Скрытый инпут, дата атрибут ссылке на попап и 10 строчек кода. Без php и дополнительных плагинов, на которых пошло 4 предыдущих дня)
Решил вопрос через JS
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

В Contact Form 7 можно передать название текущей записи через hidden-поле. Если форма выводится внутри цикла карточек, вам нужно для каждой карточки подставлять заголовок конкретной записи, а не надеяться, что CF7 сам поймёт контекст.
В форме CF7 добавьте скрытое поле:
[hidden post_title default:get]
А в шаблоне при выводе формы передавайте параметр в shortcode:
echo do_shortcode('[contact-form-7 id="123" title="Форма" post_title="' . esc_attr(get_the_title()) . '"]');
Если CF7 не подставляет произвольный атрибут напрямую, можно использовать фильтр:
add_filter('wpcf7_form_hidden_fields', function ($fields) { if (isset($_GET['post_title'])) { $fields['post_title'] = sanitize_text_field(wp_unslash($_GET['post_title'])); } return $fields; });
Но лучше передавать не только заголовок, а ещё ID записи. Заголовок может измениться или повторяться, а ID останется точным:
echo do_shortcode('[contact-form-7 id="123" title="Форма" post_id="' . get_the_ID() . '"]');
В шаблоне письма CF7 используйте теги
[post_title]и[post_id]. Если форма открывается в модальном окне, часто удобнее записывать название карточки в hidden-поле через JavaScript при клике по кнопке «Оставить заявку». Главное — не брать название из визуального текста без очистки, если оно потом уходит в письмо или CRM.Если заявка отправляется не со страницы самой записи, а из общего списка, не используйте глобальный
$postпосле вложенных циклов безwp_reset_postdata(). Иначе в форму может попасть заголовок не той записи. Надёжнее передавать ID прямо в атрибут кнопки, а при открытии формы копировать его в hidden-поле.