Stworzenie formularza kontaktowego AJAX w WordPressie bez wtyczek
Podczas optymalizacji strony pod kątem szybkości zauważyłem, że popularna wtyczka formularza kontaktowego Contact Form 7 (CF7) razem z reCAPTCHA negatywnie wpływa na wyniki PageSpeed Insights.
Postanowiłem więc stworzyć własny formularz w WordPress bez użycia wtyczki oraz bez przeładowywania, który nie tylko poprawi wydajność strony, ale również zapewni większą elastyczność i kontrolę nad procesem kontaktu z użytkownikami.
Poniższy przewodnik krok po kroku przedstawia ten sposób stworzenia za pomocą tylko pliku function.php.
Krok 1: jQuery w kolejce
Aby korzystać z funkcji AJAX w formularzu, należy dołączyć bibliotekę jQuery. Możesz to zrobić, dodając następujący kod:
function add_custom_scripts() {
wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'add_custom_scripts');
Krok 2: Przesłanie formularza kontaktowego za pomocą technologii AJAX
Ta funkcja zapewnia podstawową funkcjonalność obsługi formularza kontaktowego z AJAX, weryfikacją antyspamową i wysyłaniem wiadomości e-mail. Możesz ją rozszerzyć o dodatkowe opcje i integracje, aby dopasować ją do swoich potrzeb.
function handle_contact_form_submit() {
if (isset($_POST['action']) && $_POST['action'] == 'contact_form_submit') {
// Zweryfikuj dane formularza
if (isset($_POST['email']) && isset($_POST['message'])) {
// Wykonaj podstawową weryfikację antyspamową (możesz ją ulepszyć)
$is_spam = false;
// Dodaj dodatkowe sprawdzanie antyspamowe, jeśli jest to konieczne
if (!$is_spam) {
// Przetwórz dane formularza (wyślij e-mail, zapisz w bazie danych itp.)
// Zamień to na swoją własną logikę obsługi formularza
$email = sanitize_email($_POST['email']);
$message = sanitize_text_field($_POST['message']);
// Przykład: Wyślij powiadomienie e-mail
$to = 'mail@mail.mail';
$subject = 'Nowy formularz kontaktowy twojastrona.pl';
$body = "Email: $email \nWiadomość: $message";
wp_mail($to, $subject, $body);
// Zwróć odpowiedź
wp_send_json_success('Formularz przesłany pomyślnie!');
} else {
wp_send_json_error('Wykryto spam: Wysłanie formularza nie powiodło się.');
}
} else {
wp_send_json_error('Nieprawidłowe dane formularza.');
}
}
}
add_action('wp_ajax_contact_form_submit', 'handle_contact_form_submit');
add_action('wp_ajax_nopriv_contact_form_submit', 'handle_contact_form_submit');
Opis kodu funkcji handle_contact_form_submit
:
Ta funkcja obsługuje przesyłanie formularza kontaktowego za pomocą AJAX i wysyła wiadomość e-mail z informacjami z formularza.
Krok po kroku:
- Sprawdzenie akcji i danych formularza:
- Sprawdza, czy akcja POST jest ustawiona na „contact_form_submit”.
- Sprawdza, czy pola „email” i „message” są obecne w danych POST.
- Podstawowa weryfikacja antyspamowa:
- (Możesz udoskonalić tę logikę)
- Sprawdza, czy w wiadomości lub adresie email występują typowe wzorce spamu.
- Obsługa formularza (opcjonalnie):
- Jeśli nie jest to spam:
- Sanitałyzuje adres email i wiadomość.
- (Zamień to na swoją logikę)
- Przykład: wysyła powiadomienie e-mail na adres „mail@mail.mail” z tematem „Nowy formularz kontaktowy twojastrona.pl” i treścią zawierającą email i wiadomość z formularza.
- Zwraca komunikat JSON o sukcesie.
- W przypadku wykrycia spamu:
- Zwraca komunikat JSON o błędzie.
- Jeśli nie jest to spam:
- Obsługa błędów:
- Jeśli dane formularza są nieprawidłowe, zwraca komunikat JSON o błędzie.
Dodatkowe uwagi:
- Funkcja korzysta z
wp_send_json_success()
iwp_send_json_error()
do zwracania odpowiedzi JSON do żądania AJAX. - Używa
sanitize_email()
isanitize_text_field()
do oczyszczania danych formularza przed ich użyciem. - Pamiętaj, aby dostosować logikę wysyłania wiadomości e-mail i weryfikacji antyspamowej do swoich potrzeb.
- Kod korzysta z akcji
wp_ajax_contact_form_submit
iwp_ajax_nopriv_contact_form_submit
, aby zarejestrować funkcję obsługi żądań AJAX.
Krok 3: Wyświetlanie formularza kontaktowego za pomocą shortcode’a
Ten kod umożliwia dodawanie formularza poprzez shortcode o nazwie contact_form
, na przykład w edytorze:
function display_contact_form() {
ob_start(); ?>
<h2>Formularz kontaktowy</h2>
<form id="contact_form">
<input type="email" class="form_control" name="email" placeholder="<?php _e('Email', 'uniwp') ?>" required>
<textarea name="message" class="form_control" placeholder="<?php _e('Opisz swoje oczekiwania*', 'uniwp') ?>" required></textarea>
<input type="hidden" name="action" value="contact_form_submit">
<button type="submit" class="btn_3 btn_round btn_md"><?php _e('Wyślij', 'uniwp') ?></button>
</form>
<div id="contact-form-response"></div>
<script>
jQuery(function($) {
$('#contact_form').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: $(this).serialize(),
success: function(response) {
$('#contact-form-response').html(response.data);
},
error: function() {
$('#contact-form-response').html('Error submitting form.');
}
});
});
});
</script>
<?php return ob_get_clean();
}
add_shortcode('contact_form', 'display_contact_form');
Przyjrzyjmy się kodowi:
1. Buforowanie wyjścia:
ob_start()
: Uruchamia buforowanie wyjścia. Wszelkie dane wygenerowane przez kod w buforze zostaną przechwycone zamiast być bezpośrednio wysyłane do przeglądarki.
2. Budowanie formularza:
<form id="contact_form">
: Tworzy element formularza o identyfikatorze „contact_form”.<input type="email">
: Tworzy pole wprowadzania adresu e-mail z etykietą „Email” i obowiązkowym polem. Używa funkcji_e()
, aby przetłumaczyć tekst etykiety na bieżący język.<textarea>
: Tworzy pole tekstowe, w którym użytkownik może napisać wiadomość. Również używa_e()
dla tekstu etykiety.<input type="hidden">
: Tworzy ukryte pole wprowadzania z nazwą „action” ustawioną na „contact_form_submit”. Ta wartość zostanie wysłana z danymi formularza i użyta przez serwer do identyfikacji sposobu obsługi zgłoszenia.<button type="submit">
: Tworzy przycisk submit z tekstem „Wyślij”. Ponownie używa_e()
do tłumaczenia.<div id="contact-form-response"></div>
: Tworzy element div o identyfikatorze „contact-form-response”, który zostanie użyty do wyświetlenia odpowiedzi po wysłaniu formularza.
3. Skrypt AJAX:
$('#contact_form').submit(function(e) { ... })
: Dołącza obsługę zdarzenia submit do formularza o identyfikatorze „contact_form”. Po wysłaniu formularza zostanie uruchomiona funkcja wewnątrz obsługi zdarzenia.e.preventDefault()
: Zapobiega domyślnemu zachowaniu wysyłania formularza, które normalnie spowodowałoby ponowne załadowanie strony.$.ajax({ ... })
: Uruchamia żądanie AJAX za pomocą jQuery.type
: Ustawia metodę żądania na „POST”.url
: Ustawia adres URL punktu końcowego admin-ajax.php za pomocąadmin_url()
. Ten punkt końcowy służy do obsługi żądań AJAX w WordPressie.data
: Ustawia dane do wysłania z żądaniem. Tutaj używa$(this).serialize()
, które serializuje dane formularza do formatu ciągu zapytania.success
: Definiuje funkcję zwrotną, która zostanie wykonana, jeśli żądanie AJAX zakończy się pomyślnie.$('#contact-form-response').html(response.data)
: Aktualizuje zawartość diva „contact-form-response” danymi odebranymi z serwera (zapewne komunikatem o sukcesie).
error
: Definiuje funkcję zwrotną, która zostanie wykonana, jeśli żądanie AJAX się nie powiedzie.$('#contact-form-response').html('Błąd podczas wysyłania formularza.')
: Aktualizuje div „contact-form-response” komunikatem o błędzie.
4. Wyjście i rejestracja shortcode’a:
return ob_get_clean()
: Pobiera przechwycony bufor wyjścia za pomocąob_get_clean()
i zwraca go. Zapewnia to, że zwracany jest tylko zawarty w buforze, wykluczając sam kod.
Uwagi:
- Zmień adres email „mail@mail.mail” na swój adres email odbiorcy.
- Dostosuj styl formularza kontaktowego do swojego motywu WordPressa.
- Możesz dodać dodatkowe pola do formularza, takie jak numer telefonu lub lista rozwijana z wyborem tematu wiadomości.
Korzyści z formularza kontaktowego bez wtyczki:
- Szybsze działanie: Brak obciążenia strony dodatkową wtyczką.
- Lepsze wyniki w PageSpeed Insights: Mniejsza ilość kodu i skryptów.
- Większa elastyczność: Możliwość pełnej kontroli nad wyglądem i funkcjonalnością formularza.
- Mniejsza podatność na błędy: Brak zależności od aktualizacji wtyczek.
Stworzenie formularza kontaktowego bez wtyczki może wydawać się skomplikowane, ale z pomocą tego artykułu i krok po kroku instrukcji każdy może to zrobić. Formularz bez wtyczki jest szybszy i daje większą kontrolę nad jego wyglądem i funkcjonalnością. Same zalety 🙂