Скачивание PDF после отправки формы CF7
Я работаю над проектом клиента и хотел бы внести минимум изменений. Я не очень хорошо знаком со всем этим, приношу извинения - постараюсь показать, на каком этапе я нахожусь.
Клиент хочет, чтобы после отправки формы начиналось скачивание PDF. Есть два разных PDF и два экземпляра одной и той же формы. Заполните экземпляр формы 1, получите PDF A - Экземпляр формы 2, PDF B.
Вот как выглядят эти экземпляры:
<div id="whitepaper" class="home_whitepaper_bg w-clearfix">
<?php $lpcnt=0; if(have_rows('whitepaper_list')): ?>
<?php while(have_rows('whitepaper_list')): the_row(); $lpcnt++; ?>
<!-- Создаем строки для контента, проходим циклом и считаем циклы = lpcnt -->
<!--
... Другой контент ...
-->
<?php
the_sub_field('whitepaper_download_form');
?>
<?php
$pdf=get_permalink().'?download='.get_sub_field('whitepaper_pdf');
?>
<a data-fancybox data-src="#whitepaper_popup_<?php echo $lpcnt; ?>" data-redirect="<?php echo $pdf; ?>" href="javascript:;" class="whitepaper_download_link w-inline-block w-clearfix">
<!-- Здесь кнопки для всплывающих окон fancybox. Они используют счетчик цикла для создания определенного URL - эта информация понадобится позже! -->
А во всплывающем окне:
<div id="whitepaper_popup_<?php echo $lpcnt; ?>" class="whitepaper_popup">
<!-- используем счетчик цикла для получения определенного id div! -->
<div class="popup_whitepaper">
<div class="whitepaper_form">
<!--
Я мог бы поместить <?php echo do_shortcode...> здесь, верно?
Их текущее решение - получить javascript код из поля ACF.
У меня возникли большие проблемы с тем, как поместить форму CF7 в это поле.
-->
<?php the_sub_field('download_form'); ?>
<div class="w-clearfix"></div>
</div>
<button data-fancybox-close="" class="fancybox-close-small"></button>
<div class="w-clearfix"></div>
</div>
</div>
Хорошо. Итак, используя новые DOM-события CF7, я должен иметь возможность настроить перенаправление или что-то подобное?
В functions.php:
add_action( 'wp_footer', 'mycustom_wp_footer' );
function mycustom_wp_footer() {
?>
<script type="text/javascript">
document.addEventListener( 'wpcf7mailsent', function( event ) {
if ( 'FORM ID' == event.detail.contactFormId ) {
location = <!-- конкретный url, полученный из $lpcnt? -->;
}
}, false );
</script>
<?php
}
Я не уверен, правильным ли путем я иду - также, не могу точно понять, как получить правильный URL в мой обработчик события wpcf7mailsent.

Это сработает — хотя я хочу, чтобы одна форма обслуживала два разных файла в зависимости от того, откуда пользователь получает доступ к форме. Если я смогу получить URL PDF, сформированный вне обработчика событий, и ссылаться на эту переменную внутри него — идеально!

Думаю, в итоге я просто сделаю так. Я не буду программно различать загрузки, а просто создам две формы с разными файлами для скачивания. По крайней мере, пока. Спасибо, @parths.

Мне понадобилось добавить призыв к действию (CTA) для скачивания после содержимого всех кейсов на сайте, но "в обмен" на данные пользователя для:
- отображения формы CF7 на странице — у меня была одна и та же форма для всех записей типа case studies, которую я добавил после содержимого
- найти способ получить нужный URL PDF для скачивания, так как у каждого кейса свой PDF — я просто добавил поле ACF с фильтром только для PDF, которое возвращает URL файла
- основываясь на CF7 DOM событиях, выбрать предпочтительное действие для запуска скачивания. Поскольку я не отправляю подтверждающие письма, я предпочел работать с событием wpcf7submit. Важно: событие wpcf7submit срабатывает только после успешной валидации формы.
Вот как выглядит код:
<?php
// Для простоты используем анонимную функцию
add_action( 'wp_print_footer_scripts', function () {
// Проверяем, что загружается нужный тип записи
if ( is_admin() || ! is_singular( 'case-study' ) ) {
return;
}
// Проверяем, что поле ACF с PDF не пустое
$pdf_link = get_field( 'pdf' );
if ( empty( $pdf_link ) ) {
return;
}
// Используем событие "wpcf7submit" из CF7 DOM для принудительного скачивания
printf( "<script>document.addEventListener( 'wpcf7submit', function( event ) { window.open('%s'); }, false );</script>", $pdf_link );
} );

@just-jeff Я знаю, что это было давно, но потребность может быть актуальной до сих пор

Попробуйте этот плагин:
- Скачайте плагин
- Установите
- Установите ID формы и вложение PDF в настройках загрузки файлов CF7.
