Как в contact form7 передать тэги, чтоб они применились при получении письма?

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

Столкнулся с проблемой. Задание стоит именно через плагин Contact Form 7 в сообщении передавать возможную разметку.. То есть, если в сообщении напишут среди прочего текста test....то при получении письма этот тэг нужно чтоб распознался...и заголовок стал красного цвета...

Многочасовые поиски дали только ответ, что form 7 не дает этого делать.... Буду благодарен за любую наводку....

Дополнительно:

Ответы:

Такое поведение по умолчанию не задано в данном плагине. Разве что руками в код лезть и править под себя

через плагин Contact Form 7 в сообщении передавать возможную разметку..

Отметить чебокс "Использовать HTML-формат письма"

Как в contact form7 передать тэги, чтоб они применились при получении письма?

  • письмо просто приходит как разметка, но при этом не применяется ... пройденный этап....
  • rvitalia, я проверил - действительно, это работает только на шаблон.

Как в contact form7 передать тэги, чтоб они применились при получении письма?

Через 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, написать функцию которая распарит содержимое поля, добавит нужную разметку и передаст на отправку. Видимо через регулярки
Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

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

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 письма.

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

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

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

комментарий

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

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