Descărcați PDF după trimiterea formularului CF7
Lucrez la construcția unui site pentru un client și aș dori să schimb cât mai puțin posibil. Nu sunt foarte familiarizat cu toate acestea, îmi cer scuze - voi încerca să explic unde mă aflu.
Clientul dorește ca trimiterea unui formular să determine descărcarea unui PDF. Există două PDF-uri diferite și două instanțe ale aceluiași formular. Completați instanța 1 a formularului, primiți PDF-ul A - Instanța 2 a formularului, PDF-ul B.
Iată cum apar aceste instanțe:
<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++; ?>
<!-- Creăm rânduri pentru conținut, iterăm prin ele și numărăm buclele = lpcnt -->
<!--
... Alt conținut ...
-->
<?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">
<!-- Aici sunt butoanele pentru popup-urile fancybox. Folosesc numărul buclei pentru a construi un URL specific - aceasta este informația de care am nevoie mai târziu! -->
Și în fereastra popup:
<div id="whitepaper_popup_<?php echo $lpcnt; ?>" class="whitepaper_popup">
<!-- folosim numărul buclei pentru a obține un id specific div! -->
<div class="popup_whitepaper">
<div class="whitepaper_form">
<!--
Aș putea pune un <?php echo do_shortcode...> aici, nu?
Soluția lor actuală este să preia un cod javascript dintr-un câmp ACF.
Am avut multe probleme în a determina cum să pun formularul CF7 în acel câmp.
-->
<?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>
Bine. Deci există asta. Apoi, folosind noile evenimente DOM ale CF7, ar trebui să pot configura o redirecționare sau ceva similar?
În functions.php:
add_action( 'wp_footer', 'mycustom_wp_footer' );
function mycustom_wp_footer() {
?>
<script type="text/javascript">
document.addEventListener( 'wpcf7mailsent', function( event ) {
if ( 'ID FORMULAR' == event.detail.contactFormId ) {
location = <!-- url specific derivat din $lpcnt? -->;
}
}, false );
</script>
<?php
}
Nu sunt sigur dacă sunt pe drumul cel bun sau nu - de asemenea, nu pot determina exact cum pot obține URL-ul corect în listener-ul evenimentului wpcf7mailsent.

Asta ar funcționa - dar eu caut să am un singur formular care să servească două fișiere diferite, în funcție de unde accesează utilizatorul formularul. Dacă pot obține URL-ul PDF-ului să fie construit în afara event listener-ului și să mă refer la acea variabilă acolo - perfect!

Cred că o să ajung să fac asta. Nu voi diferenția programatic între descărcări și voi face pur și simplu două formulare cu două descărcări diferite. Cel puțin deocamdată. Mulțumesc, @parths.

Am avut nevoia să adaug un CTA de descărcare după conținutul tuturor studiilor de caz ale unui site web, dar „în schimb” al datelor utilizatorului pentru:
- afișarea unui formular CF7 pe pagina, aveam același pe toate posturile de tip single pentru studii de caz pe care le-am conectat după conținut
- găsirea unei modalități de a obține URL-ul PDF-ului dorit pentru ca oamenii să-l descarce, deoarece pentru mine toate studiile de caz au un PDF diferit, am adăugat pur și simplu un câmp ACF, filtrat doar pe PDF, care returnează URL-ul fișierului
- pe baza evenimentelor DOM CF7, alegeți acțiunea pe care o preferați pentru a face ca descărcarea să se întâmple, deoarece nu trimit nicio confirmare prin e-mail, prefer să lucrez pe evenimentul wpcf7submit. Rețineți că evenimentul wpcf7submit este declanșat doar dacă formularul a fost validat
Deci codul arată astfel:
<?php
// Pentru simplitate, folosind funcții anonime
add_action( 'wp_print_footer_scripts', function () {
// Verifică încărcarea postului singular de tipul dorit
if ( is_admin() || ! is_singular( 'case-study' ) ) {
return;
}
// Verifică dacă câmpul ACF PDF nu este gol pentru utilizare
$pdf_link = get_field( 'pdf' );
if ( empty( $pdf_link ) ) {
return;
}
// Conectează-te la evenimentul DOM "wpcf7submit" al CF7 pentru a forța descărcarea
printf( "<script>document.addEventListener( 'wpcf7submit', function( event ) { window.open('%s'); }, false );</script>", $pdf_link );
} );

@just-jeff Știu că a trecut ceva timp, dar poate încă există nevoie

Încearcă acest plugin:
- Descarcă plugin-ul
- Instalează
- Setează ID-ul formularului și atașamentul PDF în setările CF7 pentru descărcare fișiere.
