Скачивание PDF после отправки формы CF7

17 нояб. 2018 г., 05:18:15
Просмотры: 26K
Голосов: 0

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

Клиент хочет, чтобы после отправки формы начиналось скачивание 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.

0
Все ответы на вопрос 3
3

Для этого вам не нужно много кода. Просто перейдите в контактную форму > выберите контактную форму > дополнительные настройки, вставьте следующий код.
document.addEventListener( 'wpcf7mailsent', function( event ) { location = 'YOUR_PDF_URL';}, false );

19 нояб. 2018 г. 15:36:03
Комментарии

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

Just Jeff Just Jeff
20 нояб. 2018 г. 01:25:32

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

Just Jeff Just Jeff
24 нояб. 2018 г. 23:29:52

Можно ли сделать так, чтобы PDF открывался в новой вкладке, а не в текущей?

Srinivas08 Srinivas08
18 февр. 2021 г. 15:58:44
2

Мне понадобилось добавить призыв к действию (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 );
} );
25 июн. 2020 г. 21:27:11
Комментарии

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

Maxime Culea Maxime Culea
25 июн. 2020 г. 21:28:07

Да, мне это было нужно 2 недели назад, и после долгих поисков ни один вопрос не содержал правильного ответа. Не могли бы вы проголосовать за вопрос, чтобы люди смогли найти правильный ответ на него?

Maxime Culea Maxime Culea
16 июл. 2020 г. 10:45:37
0

Попробуйте этот плагин:

  1. Скачайте плагин
  2. Установите
  3. Установите ID формы и вложение PDF в настройках загрузки файлов CF7.

https://wordpress.org/plugins/cf7-file-download/

15 сент. 2020 г. 22:01:12