Formularele de contact sunt esențiale pentru orice site, deoarece permit vizitatorilor să ia legătura cu tine. În acest articol, vom crea un formular de contact personalizat pe site-ul tău WordPress. Acest formular va colecta informații de la utilizatori, va valida datele introduse, va trimite emailuri către administrator și client și va genera un număr unic de tichet pentru fiecare cerere. Vom adăuga măsuri anti-bot pentru a proteja site-ul de spam.
Ce vom face:
- Vom crea un formular de contact.
- Vom procesa datele introduse în formular.
- Vom trimite notificări prin email administratorului și clientului.
- Vom adăuga măsuri anti-bot pentru protecție.
Codul complet al formularului de contact personalizat
Acesta este codul complet pe care îl vei folosi pentru a implementa formularul de contact. Poți să-l adaugi în fișierul functions.php
al temei sau să-l utilizezi cu pluginul Code Snippets.
Codul PHP pentru formularul de contact:
<?php
// Funcția care generează formularul de contact
function tutoriale_wordpress_contact_form() {
$current_time = time(); // Timpul curent
ob_start(); ?>
<form id="tutoriale-wordpress-contact-form" method="post" action="">
<label for="name">Nume:</label>
<input type="text" name="name" required><br>
<label for="phone">Telefon:</label>
<input type="tel" name="phone" required><br>
<label for="email">Email:</label>
<input type="email" name="email" required><br>
<label for="department">Selectează departamentul:</label>
<select name="department" required>
<option value="" disabled selected>Selectează departamentul</option>
<option value="Vânzări">Vânzări</option>
<option value="Contabilitate">Contabilitate</option>
<option value="Tehnic">Tehnic</option>
</select><br>
<label for="message">Mesaj:</label>
<textarea name="message"></textarea><br>
<!-- Honeypot field -->
<input type="text" name="extra_field" style="display:none"><br>
<!-- Anti-bot: Întrebarea de validare -->
<label for="validation_question">Cât fac 3 + 2?</label>
<input type="text" name="validation_question" required><br>
<!-- Anti-bot: Timpul de generare a formularului -->
<input type="hidden" name="form_time" value="<?php echo $current_time; ?>">
<input type="submit" name="submit_contact_form" value="Trimite mesajul">
</form>
<?php
return ob_get_clean();
}
add_shortcode('tutoriale_wordpress_contact_form', 'tutoriale_wordpress_contact_form');
// Funcția care procesează datele din formular
function process_tutoriale_wordpress_contact_form() {
if (isset($_POST['submit_contact_form'])) {
// Verificare honeypot
if (!empty($_POST['extra_field'])) {
return; // Dacă honeypot-ul este completat, blocăm cererea
}
// Verificare anti-boti (întrebarea de validare)
if ($_POST['validation_question'] !== '5') {
echo '<script>alert("Întrebarea de validare a fost completată greșit! Te rugăm să încerci din nou."); window.location.href = "' . home_url('/contact-us/') . '";</script>';
exit; // Oprim execuția dacă răspunsul este greșit
}
// Verificare dacă formularul a fost trimis prea repede (sub 5 secunde)
$form_time = intval($_POST['form_time']);
$current_time = time();
if ($current_time - $form_time < 5) {
echo '<script>alert("Formularul a fost trimis prea rapid. Încercare eșuată!"); window.location.href = "' . home_url('/contact-us/') . '";</script>';
exit; // Oprim execuția dacă formularul a fost trimis prea repede
}
// Preluarea datelor din formular și sanitizarea acestora
$name = sanitize_text_field($_POST['name']);
$phone = sanitize_text_field($_POST['phone']);
$email = sanitize_email($_POST['email']);
$department = sanitize_text_field($_POST['department']);
$message = sanitize_textarea_field($_POST['message']);
// Generăm un număr de tichet
$ticket_number = get_option('last_ticket_number', 20234);
$new_ticket_number = $ticket_number + 1;
update_option('last_ticket_number', $new_ticket_number);
// Trimiterea emailului către client și către site
$to_admin = "suport@tutorialewordpress.ro";
$subject_admin = "Cerere nouă de la $name";
$message_admin = "Ai primit o cerere nouă de la $name.\nTelefon: $phone\nEmail: $email\nDepartament: $department\nNumăr tichet: $new_ticket_number\nMesaj: $message";
wp_mail($to_admin, $subject_admin, $message_admin);
$subject_client = "Cererea ta a fost înregistrată - Tichet #$new_ticket_number";
$message_client = "Bună ziua, $name!\n\n".
"Îți mulțumim că ne-ai contactat! Cererea ta a fost înregistrată cu succes, iar echipa noastră o va procesa cât mai curând posibil.\n\n".
"Numărul unic al cererii tale este: Tichet #$new_ticket_number.\n".
"Păstrează acest număr pentru referințe viitoare, deoarece ne va ajuta să identificăm rapid solicitarea ta în sistem.\n\n".
"Vom face tot posibilul să răspundem cât mai repede și să îți oferim suportul necesar pentru departamentul selectat (**$department**).\n\n".
"Ce urmează?\n".
"1. Un membru al echipei noastre va analiza cererea ta și va lua legătura cu tine în cel mai scurt timp.\n".
"2. Te vom informa despre stadiul cererii tale și despre eventualele pași următori necesari pentru soluționarea problemei.\n".
"3. Între timp, dacă ai alte întrebări sau nelămuriri, ne poți contacta la adresa de email **office@tutorialewordpress.ro** sau la numărul de telefon **0700000000**.\n\n".
"Îți mulțumim încă o dată pentru încrederea acordată și așteptăm cu nerăbdare să te ajutăm!\n\n".
"Cu stimă,\n".
"Echipa Tutoriale WordPress\n".
"https://tutorialewebsite.ro\n\n".
"Acest mesaj este generat automat, te rugăm să nu răspunzi la el. Pentru orice întrebări sau clarificări, te rugăm să ne contactezi folosind informațiile de mai sus.";
wp_mail($email, $subject_client, $message_client);
// Afișare mesaj de succes și redirecționare către homepage
echo '<script>
alert("Mesajul a fost trimis cu succes! Numărul tichetului tău este: ' . $new_ticket_number . '");
window.location.href = "' . home_url() . '"; // Redirecționare către pagina principală
</script>';
}
}
add_action('wp', 'process_tutoriale_wordpress_contact_form');
Ce face acest cod:
- Formularul de contact:
- Codul generează un formular care include câmpuri pentru nume, telefon, email, departament și mesaj.
- Honeypot: Un câmp ascuns pentru a preveni spamul de la boturi.
- Întrebarea de validare: O întrebare simplă pentru a verifica dacă utilizatorul este uman (ex: „Cât fac 3 + 2?”).
- Timpul de generare a formularului: Se adaugă un timp pentru a preveni trimiterea rapidă a formularului, un mecanism de protecție împotriva boturilor automate.
- Procesarea datelor:
- Când formularul este trimis, se verifică dacă câmpurile sunt valide și dacă sunt îndeplinite condițiile de securitate.
- Se preiau datele și se sanitizează pentru a preveni injecțiile SQL sau alte atacuri.
- Se generează un număr unic de tichet pentru fiecare cerere, care este stocat și incrementat.
- Trimiterea emailurilor:
- Emailul administratorului conține toate informațiile de contact și cererea completată.
- Emailul clientului include un mesaj personalizat cu numărul de tichet și detalii despre cererea sa.
- Mesajul de succes:
- După trimiterea formularului, utilizatorul este redirecționat către pagina principală și i se afișează un mesaj de succes care include numărul tichetului.
Implementarea codului în WordPress
1. Adăugarea codului în fișierul functions.php
:
- Mergi în Aparanță > Editor de teme și deschide fișierul
functions.php
al temei active. - Lipește codul complet de mai sus la sfârșitul fișierului și salvează modificările.
2. Folosirea pluginului Code Snippets:
- Instalează și activează pluginul Code Snippets din Plugins > Add New.
- Mergi la Snippets > Add New, adaugă titlul Formular de contact Tutoriale WordPress și lipește codul complet în câmpul de cod.
- Salvează și activează snippetul.
3.Cum să folosești shortcode-ul
Pentru a utiliza formularul pe site-ul tău, trebuie doar să adaugi shortcode-ul în paginile sau articolele unde dorești să apară formularul:
[tutoriale_wordpress_contact_form]
Acum, formularul tău de contact este complet funcțional și protejat de spam, iar clienții vor primi un tichet unic pentru fiecare cerere.
Concluzie
Prin urmare, am creat un formular de contact personalizat în WordPress, cu validare a datelor, protecție anti-bot și trimiterea notificărilor prin email. Aceste funcționalități sunt implementate eficient și pot fi folosite atât în fișierul functions.php
, cât și prin pluginul Code Snippets.