Scaricare PDF dopo l'invio del modulo CF7
Sto lavorando sul sito di un cliente e vorrei modificare il meno possibile. Non ho molta familiarità con tutto questo, mi scuso - cercherò di mostrare a che punto sono.
Il cliente vuole che l'invio di un modulo richieda il download di un PDF. Ci sono due PDF diversi e due istanze dello stesso modulo. Compilando l'istanza 1 del modulo si ottiene il PDF A - Con l'istanza 2 del modulo si ottiene il PDF B.
Ecco come appaiono queste istanze:
<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++; ?>
<!-- Creazione delle righe per il contenuto, ciclo e conteggio dei cicli = lpcnt -->
<!--
... Altro contenuto ...
-->
<?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">
<!-- Qui ci sono i pulsanti per i popup fancybox. Usano il conteggio del ciclo per costruire un URL specifico - questa è l'informazione che mi serve dopo! -->
E nella finestra popup:
<div id="whitepaper_popup_<?php echo $lpcnt; ?>" class="whitepaper_popup">
<!-- uso quel conteggio del ciclo per ottenere un ID div specifico! -->
<div class="popup_whitepaper">
<div class="whitepaper_form">
<!--
Potrei inserire un <?php echo do_shortcode...> qui, no?
La loro soluzione attuale è quella di prendere un codice javascript da un campo ACF.
Ho avuto molte difficoltà a capire come inserire il modulo CF7 in quel 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>
Bene. Quindi, usando i nuovi eventi DOM di CF7, dovrei essere in grado di impostare un reindirizzamento o simili?
in functions.php:
add_action( 'wp_footer', 'mycustom_wp_footer' );
function mycustom_wp_footer() {
?>
<script type="text/javascript">
document.addEventListener( 'wpcf7mailsent', function( event ) {
if ( 'ID_MODULO' == event.detail.contactFormId ) {
location = <!-- url specifico derivato da $lpcnt? -->;
}
}, false );
</script>
<?php
}
Non sono sicuro di essere sulla strada giusta o meno - inoltre, non riesco a capire esattamente come posso ottenere l'URL corretto nel mio listener dell'evento wpcf7mailsent.
Non serve molto codice per farlo. Basta andare nel modulo di contatto > selezionare il modulo di contatto > impostazioni aggiuntive, incolla il codice qui sotto.
document.addEventListener( 'wpcf7mailsent', function( event ) {
location = 'YOUR_PDF_URL';}, false );

Funzionerebbe, anche se sto cercando di avere un unico modulo che serva due file diversi, a seconda di dove l'utente accede al modulo. Se riesco a costruire l'URL del PDF al di fuori dell'ascoltatore di eventi e a fare riferimento a quella variabile lì - perfetto!

Penso che alla fine farò così. Non differenzierò programmaticamente i download e creerò semplicemente due moduli con due download diversi. Per ora, almeno. Grazie, @parths.

Ho avuto la necessità di aggiungere una CTA per il download dopo il contenuto di tutti i case study di un sito web, ma "in cambio" dei dati dell'utente per:
- visualizzare un modulo CF7 nella pagina, ne avevo uno uguale su tutti i single post type dei case study che ho agganciato dopo il contenuto
- trovare un modo per ottenere l'URL del PDF desiderato che le persone possono scaricare, dato che per me tutti i case study hanno un PDF diverso, ho semplicemente aggiunto un campo ACF, filtrato solo per PDF, che restituisce l'URL del file
- basandomi sugli eventi DOM di CF7, scegliere l'azione preferita per far avvenire il download, dato che non sto inviando alcuna email di conferma, preferisco lavorare sull'evento wpcf7submit. Nota che l'evento wpcf7submit viene attivato solo se il modulo è stato validato
Quindi il codice è questo:
<?php
// Per semplicità, uso una funzione anonima
add_action( 'wp_print_footer_scripts', function () {
// Verifica il caricamento del post type singular desiderato
if ( is_admin() || ! is_singular( 'case-study' ) ) {
return;
}
// Verifica se il campo ACF PDF non è vuoto per l'uso
$pdf_link = get_field( 'pdf' );
if ( empty( $pdf_link ) ) {
return;
}
// Aggancio all'evento DOM "wpcf7submit" di CF7 per forzare il download
printf( "<script>document.addEventListener( 'wpcf7submit', function( event ) { window.open('%s'); }, false );</script>", $pdf_link );
} );

@just-jeff So che è passato del tempo, ma potrebbe esserci ancora la necessità

Prova questo plugin:
- Scarica il plugin
- Installa
- Imposta l'ID del modulo e l'allegato PDF nelle impostazioni di CF7 file download.
