Descargar PDF después del envío del formulario CF7

17 nov 2018, 05:18:15
Vistas: 26K
Votos: 0

Estoy trabajando en un proyecto para un cliente y me gustaría cambiar lo menos posible. No estoy muy familiarizado con todo esto, mis disculpas - intentaré mostrar dónde estoy.

El cliente quiere que el envío de un formulario active la descarga de un PDF. Hay dos PDFs diferentes y dos instancias del mismo formulario. Al completar la instancia 1 del formulario, se obtiene el PDF A - Con la instancia 2 del formulario, el PDF B.

Así es como aparecen esas instancias:

<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++; ?>
<!-- Creando filas para el contenido, recorriendo y contando bucles = lpcnt -->

<!--
... Otro contenido ...
-->

  <?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">
<!-- Aquí están los botones para las ventanas emergentes de fancybox. Usan el contador del bucle para construir una URL específica - ¡esta es la información que quiero después! -->

Y en la ventana emergente:

    <div id="whitepaper_popup_<?php echo $lpcnt; ?>" class="whitepaper_popup">
<!-- usando ese contador de bucle para obtener un id específico de div! -->
        <div class="popup_whitepaper">
            <div class="whitepaper_form">
                <!-- 
Podría poner un <?php echo do_shortcode...> aquí, ¿no? 
Su solución actual es obtener un código javascript de un campo ACF. 
He tenido muchos problemas para averiguar cómo poner el formulario CF7 en ese campo.
                -->
                <?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>

Bien. Entonces, usando los nuevos eventos DOM de CF7, ¿debería poder configurar una redirección o similar?

En 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 específica derivada de $lpcnt? -->;
}
}, false );
</script>
<?php
}

No estoy seguro si estoy en el camino correcto o no - además, no puedo determinar exactamente cómo puedo obtener la URL correcta en mi detector de eventos wpcf7mailsent.

0
Todas las respuestas a la pregunta 3
3

No necesitas mucho código para ello. Solo ve al formulario de contacto > selecciona el formulario > configuración adicional, pega el siguiente código.
document.addEventListener( 'wpcf7mailsent', function( event ) { location = 'TU_URL_DE_PDF';}, false );

19 nov 2018 15:36:03
Comentarios

Eso funcionaría, aunque lo que busco es que un solo formulario sirva para dos archivos diferentes, dependiendo de dónde acceda el usuario al formulario. Si puedo construir la URL del PDF fuera del event listener y referenciar esa variable ahí, ¡perfecto!

Just Jeff Just Jeff
20 nov 2018 01:25:32

Creo que al final voy a terminar haciendo esto. No diferenciaré programáticamente entre las descargas, y simplemente haré dos formularios con dos descargas diferentes. Por ahora, al menos. Gracias, @parths.

Just Jeff Just Jeff
24 nov 2018 23:29:52

¿Podemos hacer que ese PDF se abra en una nueva pestaña, en lugar de la misma?

Srinivas08 Srinivas08
18 feb 2021 15:58:44
2

Tuve la necesidad de añadir un CTA de descarga después del contenido de todos los estudios de caso de un sitio web, pero "a cambio" de los datos del usuario para:

  • mostrar un formulario CF7 en la página, tenía el mismo en todos los posts del tipo de estudio de caso individual que enganché después del contenido
  • encontrar una manera de obtener la URL del PDF deseado para que las personas lo descarguen, ya que para mí todos los estudios de caso tienen un PDF diferente, simplemente añadí un campo ACF, filtrado solo para PDF, que devuelve la URL del archivo
  • basado en eventos DOM de CF7, elegir la acción que prefieras para que la descarga ocurra, como no estoy enviando ningún correo de confirmación, prefiero trabajar en el evento wpcf7submit. Ten en cuenta que el evento wpcf7submit se dispara solo si el formulario ha sido validado

Así que el código se ve así:

<?php 
// Por simplicidad, uso funciones anónimas
add_action( 'wp_print_footer_scripts', function () {
    // Verificar la carga del tipo de post singular deseado
    if ( is_admin() || ! is_singular( 'case-study' ) ) {
        return;
    }

    // Verificar si el campo ACF del PDF no está vacío para usarlo
    $pdf_link = get_field( 'pdf' );
    if ( empty( $pdf_link ) ) {
        return;
    }

    // Enganchar al evento DOM "wpcf7submit" de CF7 para forzar la descarga
    printf( "<script>document.addEventListener( 'wpcf7submit', function( event ) { window.open('%s'); }, false );</script>", $pdf_link );
} );
25 jun 2020 21:27:11
Comentarios

@just-jeff Sé que esto fue hace tiempo, pero aún podría haber una necesidad

Maxime Culea Maxime Culea
25 jun 2020 21:28:07

Sí, lo necesité hace 2 semanas, y después de mucha investigación ninguna pregunta estaba respondida correctamente. ¿Podrías considerar votar positivo para que la gente encuentre la respuesta correcta a esta pregunta, por favor?

Maxime Culea Maxime Culea
16 jul 2020 10:45:37
0

Prueba este plugin:

  1. Descarga el plugin
  2. Instálalo
  3. Configura el ID del formulario y el adjunto PDF en los ajustes de descarga de archivos de CF7.

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

15 sept 2020 22:01:12