Contact Form 7 (CF7) to jedna z najpopularniejszych wtyczek do tworzenia formularzy kontaktowych w WordPressie. Domyślnie pozwala ona na wysyłanie wiadomości na jeden zdefiniowany adres e-mail. Ale co, jeśli potrzebujesz wysyłać formularze na różne adresy w zależności od strony, na której znajduje się formularz? Zamiast tworzyć kilka lub kilkanaście różnych formularzy kontaktowych możesz zastosować prosty trick który ułatwi Ci to zadanie. W tym poradniku pokażę Ci, jak dynamicznie ustawić odbiorcę wiadomości w CF7 na podstawie konkretnej strony w WordPressie.
Krok 1: Wymagania wstępne
Aby skorzystać z tego rozwiązania, będziesz potrzebować:
- WordPressa z zainstalowaną i aktywną wtyczką Contact Form 7.
- Dodatkowo użyjemy wtyczki Advanced Custom Fields (ACF) do przechowywania adresów e-mail dla poszczególnych stron.
Krok 2: Tworzenie pola ACF dla adresu e-mail
Pierwszym krokiem jest utworzenie pola, w którym będziemy przechowywać adres e-mail dla każdej strony:
- Instalacja ACF:
- Jeśli jeszcze nie masz zainstalowanej wtyczki ACF, przejdź do panelu administracyjnego WordPress, wybierz Wtyczki -> Dodaj nową, a następnie wyszukaj i zainstaluj Advanced Custom Fields.
- Utworzenie pola:
- Przejdź do ACF -> Field Groups i kliknij „Dodaj nową grupę pól”.
- Nazwij grupę np. Adres e-mail dla formularzy.
- Dodaj nowe pole typu Email i nazwij je np. custom_email_recipient.
- Ustaw, aby pole było dostępne na stronach (ustawienia lokalizacji: Strona).
- Zapisz zmiany.
- Przejdź do ACF -> Field Groups i kliknij „Dodaj nową grupę pól”.
- Przypisanie adresów e-mail:
- Przejdź do edycji stron, na których masz formularze CF7, i w nowym polu wpisz odpowiedni adres e-mail.
- Przejdź do edycji stron, na których masz formularze CF7, i w nowym polu wpisz odpowiedni adres e-mail.
Krok 3: Dodanie kodu w functions.php
Następnie dodamy kod do pliku functions.php
Twojego motywu, który dynamicznie zmieni adres odbiorcy w zależności od strony:
Jeśli nie wiesz jak to zrobić zapraszam do artykułu: Jak dodać nowe funkcje do Twojej strony WordPress
add_action('wpcf7_before_send_mail', 'set_dynamic_recipient'); function set_dynamic_recipient($contact_form) { $submission = WPCF7_Submission::get_instance(); if ($submission) { $current_page_id = $submission->get_meta('container_post_id'); if (!$current_page_id) { $current_page_id = get_the_ID(); } $acf_email = get_field('custom_email_recipient', $current_page_id); if (!empty($acf_email)) { $mail = $contact_form->get_properties()['mail']; $mail['recipient'] = $acf_email; $contact_form->set_properties(array('mail' => $mail)); } } }
Ten kod modyfikuje odbiorcę wiadomości na podstawie wartości pola ACF przypisanego do strony. Dzięki temu każde wysłanie formularza na różnych stronach może być przekierowane na inny adres e-mail.
Krok 4: Testowanie rozwiązania
Po zapisaniu pliku functions.php
i skonfigurowaniu pól ACF dla stron, przetestuj formularze na każdej z nich. Upewnij się, że wiadomości są wysyłane na odpowiednie adresy e-mail.
To rozwiązanie działa również jeśli używamy jakiegoś buliera typu elementor i za jego pomocą zmieniamy style formularza kontaktowego.