Jak dynamicznie ustawić odbiorcę wiadomości w Contact Form 7 na podstawie strony w WordPressie

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:

  1. 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.
  2. 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.
  3. Przypisanie adresów 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.

Scroll to Top