Как в contact form7 передать тэги, чтоб они применились при получении письма?
Столкнулся с проблемой. Задание стоит именно через плагин Contact Form 7 в сообщении передавать возможную разметку.. То есть, если в сообщении напишут среди прочего текста test....то при получении письма этот тэг нужно чтоб распознался...и заголовок стал красного цвета...
Многочасовые поиски дали только ответ, что form 7 не дает этого делать.... Буду благодарен за любую наводку....
Дополнительно:
Ответы:
Такое поведение по умолчанию не задано в данном плагине. Разве что руками в код лезть и править под себя
через плагин Contact Form 7 в сообщении передавать возможную разметку..
Отметить чебокс "Использовать HTML-формат письма"
- письмо просто приходит как разметка, но при этом не применяется ... пройденный этап....
- rvitalia, я проверил - действительно, это работает только на шаблон.
Через hook wpcf7_before_send_mail
/** * Тут уже прошли все валидации дальше только обертка всего в шаюлон и отправка */ add_action( 'wpcf7_before_send_mail', 'my_cf7_change', 100, 1 ); function my_cf7_change( $WPCF7 ) { // тут объект со всем, что отправляется $submission = WPCF7_Submission:: get_instance(); if ( $submission ) { // тут массив с полями $posted_data = $submission->get_posted_data(); if ( ! empty( $posted_data ) ) { /** * тут обрабатываете ваш контент на стороне сервера */ $new_val = 'что то делаете'; // устанавливает то , что обработалти $WPCF7->set_properties( [ 'key' => $new_val ] ); } } return $WPCF7; } |
/** * Тут уже прошли все валидации дальше только обертка всего в шаюлон и отправка */ add_action( 'wpcf7_before_send_mail', 'my_cf7_change', 100, 1 ); function my_cf7_change( $WPCF7 ) { // тут объект со всем, что отправляется $submission = WPCF7_Submission:: get_instance(); if ( $submission ) { // тут массив с полями $posted_data = $submission->get_posted_data(); if ( ! empty( $posted_data ) ) { /** * тут обрабатываете ваш контент на стороне сервера */ $new_val = 'что то делаете'; // устанавливает то , что обработалти $WPCF7->set_properties( [ 'key' => $new_val ] ); } } return $WPCF7; }
- Код понятен...но непонятно что вы предлагаете сделать с данными ? Если по аналогии с функцией wp_mail, то для осуществления необходимой мне задачи я менял content type на html, то есть сами данные не трогал... с форм 7 такой фокус ничего не дает....
Поэтому нет идей,что я могу сделать с данными,чтобы они стали восприниматься в письме как тэги...
Заранее спасибо за ответ - rvitalia, написать функцию которая распарит содержимое поля, добавит нужную разметку и передаст на отправку. Видимо через регулярки
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Contact Form 7 по умолчанию экранирует пользовательский ввод, и это правильно. Если разрешить посетителю отправлять произвольный HTML, Вы открываете риск XSS, фишинговых ссылок, сломанной верстки письма и обхода фильтров почтовика. Поэтому “чтобы пользователь написал тег, и он применился в письме” — плохая идея для публичной формы.
Если нужно, чтобы письмо было HTML, в настройках письма CF7 включите Использовать HTML-формат письма. Но это означает, что HTML-шаблон письма, который задаёте Вы, будет обрабатываться как HTML. Это не значит, что пользовательский ввод должен становиться HTML-разметкой.
Правильная схема: пользователь выбирает вариант, а Вы в шаблоне письма подставляете заранее разрешённую разметку. Например, поле select “важность”, а в обработчике Вы формируете безопасный HTML:
add_filter('wpcf7_mail_components', function ($components) { $submission = WPCF7_Submission::get_instance(); if (!$submission) { return $components; } $data = $submission->get_posted_data(); $message = sanitize_textarea_field($data['your-message'] ?? ''); $components['body'] = '<p style="color:red">' . esc_html($message) . '</p>'; return $components; });
Если нужно разрешить ограниченный набор тегов, используйте
wp_kses()с белым списком, а не пропускайте весь HTML. Например, можно разрешить<b>,<i>,<br>, но не<script>, стили и события. Для обычной контактной формы лучше вообще не давать посетителю управлять HTML письма.