Как добавить название страницы в тело письма ContactForm7

Довольно часто мне требуется в форму плагина ContactForm 7 движка WordPress подставить название страницы или записи в форму заказа. При этом её название должно отправляться на почту,а сама поле не отображаться в форме. Вместо названия страницы можно подставлять и другие данные. Сделать это довольно просто если знать о «Хуках» у данного плагина.
И так нам достаточно создать текстовое поле с id «page_name», и значением «{page_name}. С помощью css скрыть данное поле, а у же в файле function.php прописать нужный код.
Создаем поле
Заходим на страницу плагина Contact Form 7 и нажимаем кнопку Добавить запись. Нажимаем кнопку «text», и в открывшемся окне забиваем данные как на картинке.
Чтобы в теле сообщения приходило название страницы с которой отправлена форма, переходим на вкладку «Письмо», и в «Тело письма» добавляем идентификатор текстового поля, в данном случае [text-204]
Добавляем код в function.php вашей темы:
add_filter( 'wpcf7_form_elements', 'wpcf7_form_replace', 10, 4 ); function wpcf7_form_replace($con){ global $post; return str_replace('{page_name}',$post->post_title,$con); }
Скрываем поле с помощью Jquery
<?php add_action("wp_footer",'wpcf7_form_replace_js'); function wpcf7_form_replace_js(){ ?> <script type="text/javascript"> jQuery(document).ready(function($){ $('#page_name').css('display':'none'); }); </script> <?php }
Так же можно создать отдельный плагин, и разместить код в файле wp-plugins/content/wpcf7_add_page_name/wpcf7_add_page_name.php
<?php /* Plugin Name: wpcf7_add_page_name Author: Alexey Version: 1.0 Plugin Uri: Ivacms.ru */ add_filter( 'wpcf7_form_elements', 'wpcf7_form_replace', 10, 4 ); function wpcf7_form_replace($con){ global $post; return str_replace('{page_name}',$post->post_title,$con); } add_action("wp_footer",'wpcf7_form_replace_js'); function wpcf7_form_replace_js(){ ?> <script type="text/javascript"> jQuery(document).ready(function($){ $('#page_name').css('display':'none'); }); </script> <?php }
Если всё сделано правильно, то на почту придёт письмо с названием страницы.
Второй вариант.
Это способ значительно проще и не требует создание дополнительной формы. У Contact Form существует хук wpcf7_before_send_mail
, который позволяет изменять тело письма и другие параметры.
<?php add_filter( 'wpcf7_before_send_mail', 'wpcf7_send_page_name' ); function wpcf7_send_page_name($con){ global $post; //переменная body содержит тело письма, поэтому мы допишем в него название текущей страницы $con['body'].=$post->post_title; }
Третий вариант (Самый простой)
Разработчик плагина CF7 позаботился о пользователях и программистах, которым требуется вместе с телом письма отправлять текущее название страницы на email.
Для этой задачи существует аббревиатура [_post_title], которую нужно добавить в настройки письма текущей формы в админ.панели. Такой способ был сделан на сайте «Смолникова».