Как автоматически подтягивать имя поста в CF7 и отправлять его на почту?

Ссылка скопирована
PHP
1 ответ

Всем привет!

Есть код который в цикле выводит записи на страницу

<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/

  • Refguser, пробовал
    [_post_title] [_post_name] и все что начинается с _post возвращает пустые значения в письме.
    но [_url] [_site_title] и тд работает
  • corasao, что-то не так делаешь, Или что-то наговнокодил. Проверь на чистой установке ВП, на нормальной теме. Всё должно работать (я давненько это юзал)
  • Refguser, Есть подозрение что я много всего отключил когда регистрировал новый тип записей. Как минимум отключил ссылки для них. Получилось JS-ом решить задачу.
  • Через JS можно, находишь на странице заголовок, как правило h1 и добавляешь его в значение inputa(можно даже скрытого)

    • Через JS получилось решить задачу буквально за 1-2 часа. Скрытый инпут, дата атрибут ссылке на попап и 10 строчек кода. Без php и дополнительных плагинов, на которых пошло 4 предыдущих дня)

    Как автоматически подтягивать имя поста в CF7 и отправлять его на почту?

    Решил вопрос через JS

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Елена Вебер Ответ

    В Contact Form 7 можно передать название текущей записи через hidden-поле. Если форма выводится внутри цикла карточек, вам нужно для каждой карточки подставлять заголовок конкретной записи, а не надеяться, что CF7 сам поймёт контекст.

    В форме CF7 добавьте скрытое поле:

    [hidden post_title default:get]

    [hidden post_title default:get]

    А в шаблоне при выводе формы передавайте параметр в shortcode:

    echo do_shortcode('[contact-form-7 id="123" title="Форма" post_title="' . esc_attr(get_the_title()) . '"]');

    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;
    });

    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() . '"]');

    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-поле.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно