Jak przetworzyć dane przesłane formularzem ContactForm7

Published Reading time 5 minutes

Contact Form 7 (CF7) to wtyczka WordPress służąca do tworzenia formularzy kontaktowych i zbierania danych od odwiedzających stronę. To najpopularniejsza wtyczka tego typu, używana na ponad 5 milionach instalacji na całym świecie. Jej popularność wynika z prostoty, niezawodności i dużej elastyczności.

Wtyczka oferuje łatwy w obsłudze interfejs, który pozwala szybko tworzyć formularze dopasowane do wyglądu Twojej strony. Formularze można rozbudować o funkcje takie jak ochrona antyspamowa reCAPTCHA, wielu odbiorców wiadomości czy automatyczne powiadomienia e-mail.

CF7 umożliwia wygodne zbieranie danych kontaktowych od użytkowników bez konieczności ręcznego wpisywania ich do bazy danych. Wszystkie formularze tworzone w CF7 są w pełni konfigurowalne i zawierają różne ustawienia. Możesz między innymi:

  • wybrać pola, które mają znaleźć się w formularzu kontaktowym,
  • ustalić, kto powinien otrzymywać zgłoszenia,
  • dostosować powiadomienia e-mail wysyłane po przesłaniu formularza albo
  • ustawić zasady logiki warunkowej, aby reagować na różne dane podane przez użytkownika.

Oprócz podstawowej funkcjonalności Contact Form 7 można rozszerzać za pomocą dodatków i motywów, aby jeszcze bardziej dopasować formularze do własnych potrzeb.

Wiele dostępnych rozszerzeń pozwala modyfikować wygląd formularza lub integrować go z usługami takimi jak MailChimp czy Zapier.

Możesz również połączyć CF7 z usługami zewnętrznymi, takimi jak Google reCAPTCHA, aby zwiększyć ochronę przed spamem, lub Akismetem, który zapewnia dodatkową filtrację spamu.

Podziękowania dla autora Contact Form 7

Autorem Contact Form 7 jest Takayuki Miyoshi, web developer z Tokio. Tworzy on formularze kontaktowe dla WordPressa od 2006 roku, kiedy po raz pierwszy opublikował contact-form-7, będące początkowo forką popularnej wtyczki formularza kontaktowego, którą WordPress następnie przyjął jako oficjalne rozwiązanie. Formularze tworzone przez Takayukiego są szeroko używane i stały się najpopularniejszym dodatkiem do WordPressa w tej kategorii.

Zacznijmy od najprostszej i chyba najczęściej spotykanej modyfikacji, czyli:

Jak zrobić coś dodatkowego (zapisać do pliku, zachować w bazie danych, utworzyć wpis, itd.) z przesłanym formularzem?

Dzięki temu, że autor wtyczki przewidział taką możliwość, dodanie takiej integracji jest stosunkowo proste. Spójrzmy na poniższy kod, który realizuje chyba najprostszą formę takiej integracji, a jednocześnie jest świetnym startem do budowania swoich, bardziej rozbudowanych wersji:

function prefiks_process_submitted_form_data( $contact_form ) {
    $submission = WPCF7_Submission::get_instance();
    if ( $submission ) {

        // Get the data submitted in the form
        $submitted_name = $submission->get_posted_data('your-name');
        $submitted_email = $submission->get_posted_data('your-email');
        $submitted_subject = $submission->get_posted_data('your-subject');
        $submitted_message = $submission->get_posted_data('your-message');
        // ...

        // Do something with the data (e.g. save it to a file)
        file_put_contents('cf7-log.txt', 'Data: ' . date('c') . "\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', "Autor: {$submitted_name} <{$submitted_email}>\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', 'Temat: ' . $submitted_subject . "\n", FILE_APPEND);
        file_put_contents('cf7-log.txt', "Wiadomość:\n" . $submitted_message, FILE_APPEND);
        file_put_contents('cf7-log.txt', "\n--------------------\n", FILE_APPEND);
    }
}
add_action( 'wpcf7_before_send_mail', 'prefiks_process_submitted_form_data' );

Dodatkowe warianty i pytania

Mam wiele formularzy. Jak sprawdzić, który został wysłany?

Jako parametr akcji przekazywany jest obiekt przesłanego formularza. Możemy sprawdzić jego ID (ID wpisu z opisem formularza), nazwę i tytuł.

$form_id = $contact_form->id();
$form_name = $contact_form->name();
$form_title = $contact_form->title();

Mój formularz nie musi wysyłać maila po przetworzeniu. Mogę to jakoś zablokować?

Tak. Autor wtyczki przewidział także taką możliwość. Wystarczy, że w swojej funkcji podpiętej pod akcję ustawisz flagę skip_mail na true jak poniżej:

$ contact_form-> skip_mail = true;

Jak dostać się do wszystkich wysłanych danych?

Wystarczy użyć:

$data = $submission->get_posted_data(); 

i w ten sposób w zmiennej $data będziemy mieć tablicę zawierającą wszystkie dane przesłane w formularzu.

Uwaga: Będą tam także dane pomocnicze, jak nonce, itp.

Jak przetworzyć przesłane w formularzu pliki?

Choćby tak:

$ uploaded_files = $ submission-> uploaded_files ();
foreach ((array) $ uploaded_files as $ name => $ path ) {
    // do something with the file sent from the field named $ name,
    // it is on the server in the place specified by $ path

Podsumowanie

Dzięki rozwiązaniom przygotowanym przez autora wtyczki dodanie takiej integracji jest stosunkowo proste. Co więcej, dzięki filtrom i akcjom WordPress umożliwia łatwe rozszerzanie możliwości Contact Form 7 (CF7). Poniższy kod pokazuje najprostszą formę takiej integracji, a jednocześnie stanowi dobry punkt wyjścia do bardziej zaawansowanych modyfikacji. Jeśli chcesz dowiedzieć się, jak przetwarzać dane wysyłane za pomocą formularza Contact Form 7 (CF7), śledź naszą serię wpisów na blogu lub skontaktuj się z nami, aby uzyskać pomoc.

Jeśli masz pytania dotyczące Contact Form 7 lub WordPressa, skontaktuj się z nami mailowo, przez formularz kontaktowy.

Zmień zgody