Cum să executăm un script pe server când formularul Contact Form 7 este trimis?

20 aug. 2013, 07:02:05
Vizualizări: 21.9K
Voturi: 5

Sunt începător în WordPress și încerc să creez un formular simplu. În prezent folosesc Contact Form 7 și până acum mi se pare foarte bun. Dar acum, încerc să execut un cod pe partea de server atunci când formularul este trimis. Practic, tot ce vreau este să obțin variabilele POST din formular când acesta este trimis, astfel încât să pot folosi datele formularului în script. Doresc să păstrez funcționalitatea de email care trimite la adresa de email când formularul este trimis.

Există o modalitate simplă și mai eficientă de a face acest lucru fără să fie nevoie să modific ceva în cod?

// Adaugă acest cod în functions.php
add_action('wpcf7_before_send_mail', 'my_form_processor');

function my_form_processor($contact_form) {
    // Obține toate datele formularului
    $submission = WPCF7_Submission::get_instance();
    
    if ($submission) {
        $posted_data = $submission->get_posted_data();
        
        // Acum poți procesa datele formularului
        // Exemplu:
        $nume = $posted_data['your-name'];
        $email = $posted_data['your-email'];
        
        // Adaugă aici codul tău personalizat
    }
}
1
Comentarii

Defineste "script pe partea de server"? Vorbești despre PHP care poate rula într-un context WordPress? Un script bash/Perl/altul? Ce anume? Și ce trebuie să facă scriptul?

s_ha_dum s_ha_dum
20 aug. 2013 07:51:16
Toate răspunsurile la întrebare 1
6

Ai nevoie de hook-ul wpcf7_before_send_mail care se declanșează după trimiterea cu succes a email-ului. Adaugă acest cod în fișierul tău functions.php.

add_action( 'wpcf7_before_send_mail', 'process_contact_form_data' );
function process_contact_form_data( $contact_data ){

    var_dump($contact_data->posted_data);
            $nume = $contact_data->posted_data["your-name"];
    $email = $contact_data->posted_data["your-email"];

    echo $nume ;
    echo $email;                
}

Poți accesa câmpurile după numele lor în array-ul $contact_data->posted_data.


Da. Poți redirecționa către altă pagină fie cu javascript, fie din funcția de mai sus. Cu javascript, trebuie să adaugi următoarea linie în secțiunea Setări Adiționale din formularul de contact creat.

on_sent_ok: "location = 'http://domeniultau.com/multumesc.php';"

Dar această metodă nu îți permite să folosești valorile trimise din formular. Așa că folosește metoda alternativă.

Redirecționează către pagina multumesc din funcția menționată mai sus. Dar înainte de redirecționare, setează informațiile pe care vrei să le afișezi pe pagina multumesc în variabile de SESSION (cum ar fi nume, email, subiect din formular). Apoi pe pagina multumesc, obține aceste valori și afișează-le. Ulterior poți distruge variabilele de sesiune și să verifici de fiecare dată dacă anumite variabile sunt setate. Acest lucru îți va oferi control asupra accesării directe a URL-ului multumesc din browser și va afișa un mesaj corespunzător care să indice că pagina nu este accesibilă direct.

20 aug. 2013 07:55:37
Comentarii

Mulțumesc pentru răspunsul tău @Phobos. Este posibil ca după trimiterea formularului să fiu redirecționat către o pagină de mulțumire unde aș putea folosi variabilele post din formularul trimis prin Contact 7?

Atasha Atasha
20 aug. 2013 15:58:33

@drifter te rog verifică răspunsul actualizat.

SachinGutte SachinGutte
20 aug. 2013 18:39:27

această soluție nu funcționează. pe lângă faptul că nu redirecționează, utilizatorul nu primește niciun feedback după trimiterea formularului (în ciuda faptului că e-mailul este trimis) și rămâne blocat cu o animație de încărcare nesfârșită. Apropo, autorii descurajează oficial utilizarea hook-ului on_sent_ok (care de fapt funcționează) și oferă o soluție care, din păcate, nu funcționează

zok zok
17 aug. 2017 12:36:42

Deoarece a trecut mult timp, autorul poate să fi modificat API-ul și hook-urile.

SachinGutte SachinGutte
17 aug. 2017 13:07:42

on_sent_ok este depreciat și nu mai este disponibil

kanlukasz kanlukasz
18 mai 2020 20:24:08

NU MAI FUNCȚIONEAZĂ, datele ar trebui acum procesate folosind $submission = WPCF7_Submission::get_instance(); și $posted_data = $submission->get_posted_data(); conform acestui răspuns

rAthus rAthus
17 dec. 2020 12:18:57
Arată celelalte 1 comentarii