Post automatisch aus Contact Form 7 Formulardaten erstellen

Nach vielen E-Mails, die wir in einem unserer Projekte erhalten haben, stellte sich irgendwann die Frage nach der “Massentauglichkeit”, sprich wie kann ich viele Anfragen in angemessener Zeit bearbeiten?

Unsere Formulare haben wir mit Contact Form 7 erstellt, einem der etabliertesten Forms Plugins für WordPress. Die E-Mails zogen größtenteils das manuelle Erstellen von verschiedenen Post Types nach sich. Die Idee, automatisch Posts aufgrund einer Formularabsendung zu erstellen liegt nahe. Doch wie macht man das?

Nach weniger Recherche und Testen als gedacht, bietet sich nun folgende Lösung an.

Contact Form 7 bietet einen Action Hook “wpcf7_before_send_mail” an, welches ein Array beinhaltet, dass den Form Namen und die Daten des Forms beinhaltet. Also hängen wir eine Funktion an diesen Action Hook, in der wir auf die Formulardaten zugreifen und den gewünschten Post erstellen. Da wir weiterhin die Daten manuell prüfen wollen, legen wir den Post im Status “Entwurf” an. Um die autimatisch erstellen Posts zu identifizeren, weisen wir diesem einen neuen, generischen Benutzer, zu. Außerdem füllen wir noch ein paar Custom Fields sowie eine Custom Taxonomy.

function wpcf7_to_post($cfdata) {  
    // get data from submitted form

    $formtitle = $cfdata->title;

    $formdata = $cfdata->posted_data;	

    // create post for form called 'myform'
    if ( $formtitle == 'myform') {

	// create the new post
	$newpost = array( 'post_title'=>$formdata['titel'], 
	     		  'post_content'=>$formdata['inhalt'],
	    		  'post_status'=>'draft',
                          'post_type'=>'myposttyoe',
                        );

          $newpostid = wp_insert_post($newpost);

        // add meta data for custom fields of the new post
	add_post_meta($newpostid, 'custom-field-name', $formdata['form-data-field']);
	add_post_meta($newpostid, 'custom-field-name-2', $formdata[form-data-field-2']);

        // set post terms
        wp_set_post_terms( $newpostid, $formdata['form-data-fieldt'], 'my-custom-taxonomy', true );

	}
}
add_action('wpcf7_before_send_mail', 'wpcf7_to_post',1);

Im einfachsten Fall war es das dann auch schon. Je nach Anwendungsfall kann man natürlich Prüfungen und Lookups von weiteren Daten vornehmen, bevor die Daten in den Post eingetragen werden.

Um Elemente des Contact Form 7 Formulars dynamisch mit Datenbankinhalten zu füllen, gibt es demnächst einen neuen Beitrag.


0 0 0


Diskussion

avatar placeholder
15. Jan 2014 von Sturm

in welchem Verzeichnis/Datei finde ich ‘wpcf7_before_send_mail’ ?

avatar placeholder
16. Apr 2015 von Sascha Jankovic

Hallo Frau Taberski,

durch Recherche im Internet bin ich auf Ihren Beitrag gestoßen. Leider bin ich nicht ganz der IT-Experte, deshalb schreibe ich Ihnen.
Wir wollen mehrere Auswahlmöglichkeiten und dann natürlich auch unterschiedliche automatische E-Mails generieren um das Contact Form 7 ordentlich einzusetzen.

Ich habe diesen Text bereits in ein WP-Forum geschrieben. Die aktuelle Seite lern.de ist noch mit einem alten CMS versehen, wird sich in Kürze aber ändern, sobald wir den Content der neuen Webpage auf Deutsch angepasst haben.

Hier der Text:
ich habe das Contact Formular ordentlich installiert, finde aber zu einigen Fragen/Problemen nicht den richtigen Beitrag im Forum. Das Template, das verwendet wird, wurde gekauft.
Vielleicht kann jemand helfen.

Ich habe ein einziges Kontaktformular, das aber mehrere Funktionen bzw. Zielgruppen erreichen soll, eingerichtet um die Übersicht nicht zu verlieren.

Dabei kommen mehrere Probleme auf:

1. Ich habe eine Auswahl vor dem eigentlichen Kontaktformular eingerichtet. Dabei soll bei der Auswahl einer Option darunter dann nochmals eine neue Auswahl möglich sein. Beispiel Kursanmeldung, danach neue Auswahl Kurs 1, Kurs 2, Kurs 3 etc. Bei der Bestätigungsmail, die an den Besucher geht, sollte dies berücksichtigt werden.

2. Im Nachrichtenfeld wird der Text weiß auf weißen Hintergrund geschrieben. Ich weiss leider nicht wo der Fehler liegt. Das selbe gilt für das Captcha. Weißer Text auf weißem Hintergrund.

3. Bei der Auswahl “Bewerbung” sollte noch eine Upload Möglichkeit bestehen, damit Bewerbungsunterlagen sofort das Ziel erreichen. Das Upload Formular sollte aber nur angezeigt werden, wenn jemand die ursprüngliche Auswahl Bewerbung getätigt hat.

4. Sollte der Besucher eine der Möglichkeiten ausgewählt haben, sollen die Mails an unterschiedliche Adressen gehen. Hierzu habe ich leider auch keine Beschreibung gefunden.

Hier ist der Code für das Contact Form 7

[select Optionsfelder use_label_element “Allgemeine Anfrage” “Bewerbung” “Kursanmeldung” “Terminvereinbarung”]

[text* your-name watermark “Name:”]
[text your-name1 watermark “Vorname:”]
[email* your-email watermark “E-mail:”]

[text your-phone watermark “Telefonnummer:”]
[text street watermark “Straße und Hausnummer:”]
[text plz watermark “Postleitzahl und Ort:”]

[textarea your-message watermark “Ihre Nachricht:”]
[submit class:btn class:btn-primary “Senden”]

[captchac captcha-132 fg:# bg:#CFD58D size:l][captchar captcha-132]

Eventuell können Sie weiterhelfen.
Viele Grüße aus München

avatar placeholder
28. Dez 2017 von Thomas

super hilfreich

avatar placeholder
13. Feb 2020 von Georgij

Hallo Frau Tiberski und hallo tricd.de,

Der Code funktioniert wunderbar.
Jedoch ergibt sich mir folgende Frage:

Ich habe mittels des Plugins Advaced Custom Field weitere Felder zu einem Custom Posttype hinzugefügt. Diese kann ich jedoch nicht mittels
add_post_meta($newpostid, ‘custom-field-name’, $formdata[‘form-data-field’]);
ansteuern.

Haben Sie schon eine Lösung dafür gefunden?

Mitdiskutieren

*