Contact Form 7: как использовать WP шорткод и HTML в уведомлениях после сабмита формы
В этом примере рассказано, как создать свой шорткод в виде ссылки на скачиваемый документ, который будет работать в уведомлениях CF7, а также скрывать форму после успешной её отправки и концентрировать внимание пользователя на сообщении об успешной отправке (ну и нашей ссылке конечно же!).
В коде упоминается только суть - создание шорткода, его обработка в уведомлениях и на стороне фронта. Другие моменты опущены (стили, попапы и так далее), так как они у всех разные.
Шорткод будет такой:
[link text="текст ссылки" url="сама ссылка"]
Пример использования:
Скачать чек-лист можно по [link text="ссылке" url="https://disk.yandex.ru/i/dierbEef10iufA"]
Получится на выходе:
Скачать чек-лист можно по <a href="https://disk.yandex.ru/i/dierbEef10iufA" target="_blank">ссылке</a>



Код файла: CF7_Notification_Shortcodes.php
GitHub<?php
( new CF7_Notification_Shortcodes() )->hooks();
/**
* Allows you to use shortcodes in the CF7 form settings in the "Notifications when submitting a form" tab.
*/
class CF7_Notification_Shortcodes {
private array $shortcodes = [];
public function hooks(): void {
add_filter( 'wpcf7_submission_result', [ $this, 'special_mail_tags' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'attach_assets' ] );
}
public function attach_assets() {
wp_enqueue_script(
'wpcf7submit_notification_with_html_tags',
// IMPORTANT: Replace the path to the file js to the one where you will have it
get_template_directory_uri() . '/js/wpcf7submit_notification_with_html_tags.js',
[ 'contact-form-7' ]
);
}
public function special_mail_tags( $result ) {
if ( empty( $result['message'] ) ) {
return $result;
}
$this->register_shortcode_link();
$result['message'] = do_shortcode( $result['message'] );
$this->remove_shorcodes();
return $result;
}
private function register_shortcode_link(): void {
$shortcode = 'link';
add_shortcode( $shortcode, static function ( $atts ) {
return sprintf(
'<a href="%s" target="_blank">%s</a>',
esc_url( $atts['url'] ),
esc_html( $atts['text'] )
);
} );
$this->shortcodes[] = $shortcode;
}
public function remove_shorcodes(): void {
foreach ( $this->shortcodes as $shortcode ) {
remove_shortcode( $shortcode );
}
}
}
Код файла: wpcf7submit_notification_with_html_tags.js
GitHubdocument.addEventListener('wpcf7submit', function (event) {
try {
// Api
let formCssId = event.detail.apiResponse.into.substring(1);
let message = event.detail.apiResponse.message;
let status = event.detail.apiResponse.status;
// Dom
let doc = new DOMParser().parseFromString(message, 'text/html');
let htmlMessage = doc.body.innerHTML;
let containerForm = document.getElementById(formCssId);
let form = containerForm.querySelector('form');
let containerMessage = form.querySelector('.wpcf7-response-output');
setTimeout(function () {
containerMessage.innerHTML = htmlMessage;
// If you need to replace the form with a notification, otherwise delete it
if ('mail_sent' === status) {
form.innerHTML = containerMessage.outerHTML;
}
}, 100);
} catch (error) {
console.log(error);
}
}, false);
Этот код предназначен для обработки уведомлений, отправляемых с помощью плагина контактной формы Contact Form 7 (CF7) в WordPress.
Код позволяет добавлять в эти уведомления шорткоды WordPress.
В этом коде используется шорткод link. Он позволяет добавлять в уведомления ссылки. Вы можете задать URL ссылки и отображаемый текст.
После этого в уведомлениях CF7 можно использовать шорткод:
[link url="http://example.com" text="Example"]
После обработки шорткод будет преобразован в HTML-код ссылки:
<a href="http://example.com" target="_blank" rel="noopener">Example</a>
Кроме того, код содержит JavaScript-обработчик события 'wpcf7submit', который обрабатывает результаты отправки формы CF7. Этот обработчик добавляет в HTML-структуру формы текст уведомления с HTML-тегами, включая обработанный шорткод 'link'.
—