Как добавить скрытое поле в cf7?
Есть определенные страницы с разными заголовками выведенных с acf
На страницах присутствует форма одна и та же
Хочу в скрытое поле передавать заголовок, но как это сделать не пойму
нужно в скрытое поле вывести php
<input type="hidden" value="<?= get_field("title"); ?>"/> |
<input type="hidden" value="<?= get_field("title"); ?>"/>
Как такое вставить правильно в cf7 ?
Дополнительно
За такой синтаксис нужно руки отрывать. Срочно учить матчать. А правильное решение на неправильный вопрос есть в документации
Сергей @paper_castle Фрилансер Добавить код в functions.php, потом использовать добавленный шорткод в форме
add_action( 'wpcf7_init', 'yoursite_cf7_new_shortcode',20 ); function yoursite_cf7_new_shortcode() { wpcf7_add_shortcode( 'yourshortcode', 'your_site_cf7_new_shortcode_handler' ); } function your_site_cf7_new_shortcode_handler( $tag ) { return '<input type="hidden" value="'. esc_attr(get_field("title")) . '"/>'; } |
add_action( 'wpcf7_init', 'yoursite_cf7_new_shortcode',20 ); function yoursite_cf7_new_shortcode() { wpcf7_add_shortcode( 'yourshortcode', 'your_site_cf7_new_shortcode_handler' ); } function your_site_cf7_new_shortcode_handler( $tag ) { return '<input type="hidden" value="'. esc_attr(get_field("title")) . '"/>'; }
Ответы:
Посмотреть в документации cf7 как добавить шорткод поля, в логике обработки шорткода получить значение и добавить его в value, добавить шорткод этого поля в редактор формы.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В редактор Contact Form 7 PHP-код вставлять не нужно и нельзя: форма хранится как текст, поэтому конструкция с get_field внутри value либо выведется как текст, либо сломает разметку. Правильный путь такой: в форме ставится специальный тег поля, а значение берётся на сервере в момент вывода формы. Если заголовок хранится в ACF-поле title на текущей странице, сделайте отдельный form tag CF7 и выводите обычный hidden input с экранированным значением.
add_action('wpcf7_init', function () { wpcf7_add_form_tag('acf_hidden_title', 'site_cf7_acf_hidden_title', array('name-attr' => true)); }); function site_cf7_acf_hidden_title($tag) { $tag = new WPCF7_FormTag($tag); if (empty($tag->name)) { return ''; } $post_id = get_queried_object_id(); $value = ''; if ($post_id && function_exists('get_field')) { $value = (string) get_field('title', $post_id); } if ($value === '' && $post_id) { $value = get_the_title($post_id); } return sprintf( '<input type="hidden" name="%s" value="%s">', esc_attr($tag->name), esc_attr($value) ); }
Код лучше положить в functions.php дочерней темы или в небольшой mu-plugin, если поле должно работать независимо от темы. После этого в редакторе Contact Form 7 добавьте тег:
[acf_hidden_title page_title]
В письме CF7 значение можно использовать как обычный mail-tag: [page_title]. Имя page_title здесь важно: это name скрытого input, и именно по нему Contact Form 7 получит отправленное значение. Если ACF-поле title пустое, пример выше подставит стандартный заголовок текущей страницы через get_the_title. Если нужно брать другое поле, замените title в get_field на имя вашего ACF-поля.
Если нужно просто передать URL или стандартный заголовок страницы, можно сделать похожий тег без ACF. Но для вашего случая с разными заголовками из ACF рабочая схема именно такая: CF7 отвечает за поле, PHP-функция отвечает за получение и безопасную подстановку значения.