Cum să executăm un script pe server când formularul Contact Form 7 este trimis?
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
}
}

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.

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?

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ă

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

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
