Contact Form 7 ist ein WordPress-PlugIn für die Verwaltung von Formularen aller Art. Bei WPTuts+ gibt es ein schickes, aktuelles Tutorial zur Nutzung, viele weitere Infos und Details natürlich auch auf der Seite des Programmierers.
In der Basis stehen schon eine Menge Möglichkeiten zur Verfügung und es gibt ebenfalls schon einige andere PlugIns, welche diese Funktionen noch erweitern… nachfolgend möchte ich aufzeigen, wie man die Formulardaten vor dem Versand der Mail noch manipulieren kann um diese z.B. zu ändern, erweitern oder auch in die Datenbank zu schreiben.
Basis ist der Hook „wpcf7_before_send_mail“ über den man sich vor dem Mailversand einschleifen kann. Dazu bedarf es zunächst einmal nur folgender Zeilen in der functions.php
des aktivierten Themes:
// Contact Form 7 - Datenmanipulation vor Mailversand
function wisch_before_send_mail($cf7data){
// Hier kommen die eigenen Aktionen hinein
}
add_action('wpcf7_before_send_mail', 'wisch_before_send_mail', 1);
An die Stelle für die eigenen Aktionen können nun die unterschiedlichsten Aktionen eingebaut werden. Im Start wäre das z.B. die Abfrage für ein bestimmtes Formular auf Basis des Formularnamens:
// Nur fuer bestimmtes Formular auf Basis des Formulartitels
if ( $cf7data->title == 'Mein-Formular-Titel') {
// Hier eigene Aktionen fuer das bestimmte Formular starten
}
Oder der Formular-ID (welche auch immer im genannten Shorttag für Artikel/Seiten steht):
// Nur fuer bestimmtes Formular auf Basis der Formular-ID
if ( $cf7data->id == 'Meine-Formular-ID') {
// Hier eigene Aktionen fuer das bestimmte Formular starten
}
Natürlich daran denken, die hier genannten Platzhalter Mein-Formular-Titel
bzw. Meine-Formular-ID
durch Eure Werte zu ersetzen. 😉
Nachfolgend noch einige Beispiele, was man als Aktion durchführen kann, der Fantasie sind dabei natürlich keine Grenzen gesetzt…
// Alle vom Formular uebergebene Daten in Mail ausgeben
// Inhalt in das Formularfeld 'your-message' (muss vorhanden sein oder aendern) schreiben
$cf7data->posted_data["your-message"] = '>'.print_r($cf7data,1).'<';
// Formularwerte in die Datenbank schreiben
// Formularinhalte holen
$formdata = $cf7data->posted_data;
// Werte in vorhandene Datenbanktabelle schreiben
// Mehr Infos: http://codex.wordpress.org/Function_Reference/wpdb_Class#INSERT_rows
global $wpdb
$table = 'Tabellenname';
$data = array( 'Feld1' => $formdata['Feldname-fuer-Inhalt-Feld1'],
'Feld2' => $formdata['Feldname-fuer-Inhalt-Feld2'] );
$format = array( '%s', '%d' );
$wpdb->insert( $table, $data, $format );
// Eigene Aktion durchfuehren, aber keine Mail senden
$wpcf7_data->skip_mail = true;
// Weiterer eigener Code...
// Mit den Formulardaten einen neuen Artikel erstellen
// Formularinhalte holen
$formdata = $cf7data->posted_data;
// Inhalte fuer den neuen Artikel vorbereiten
$newpost = array( 'post_title' => $formdata['Feldname-fuer-den-Titel'],
'post_content' => $formdata['Feldname-fuer-den-Inhalt'],
'post_status' => 'publish');
$newpostid = wp_insert_post($newpost);
// Inhalte fuer benutzerdefinierte Felder einfuegen
add_post_meta($newpostid, 'Name-Benutzerdefiniertes-Feld', $formdata['Feldname-fuer-den-Inhalt-des-Benutzerdefinierten-Feldes']);
6 Antworten auf „WordPress: Contact Form 7 – Manipulation vor Versand“
Hi – Thank you! This was very helpful. I had to translate to English :0)
Hi Rob, nice to hear that it has helped you.
If you have a link to the translated version, then please post here, thanks.
Hallo ich habe von euch
// Formularwerte in die Datenbank schreiben benutzt es ist soweit alles supi, er schreibt alles in die Datenbank und sendet eine Mail.
Aber wenn ich Umlaute schreibe werden in Datenbank alle Einträge falsch eingetragen, aber in der Mail kommt es richtig an z.B
aus Müller macht er in der Datenbank 6dc3a46e6e6572
könnt ihr mir mein fehler erklären danke
Hallo Sven.
Das hört sich nach unterschiedlichen Konfigurationen bezügl. des Charactersets an.
Die Vorgaben solltest Du an drei Stellen prüfen:
1. In der wp-config.php
2. In der Datenbank
3. Im Header der Themedateien
Die sollten alle zusammenpassen, damit es reibungslos funktioniert.
Ich hoffe Die Links hier helfen weiter…
Hi 🙂
Ich würde gerne in der Mail die versendet wird
zu jedem Feld das ausgefüllt wurde und zu dem ein Wert vorhanden ist,
den Feldnamen mitsenden. Also z.B. Feldname: [Feldeingabe]
Also mal ganz blöde formuliert: Wenn ein Wert eingegeben wurde, gib mir auch den Feldnamen mit aus
und wenn nicht, dann nicht 🙂
Gibt es da eine einfache Lösung ?
Hallo Christoph.
Du möchtest also nur die Feldbezeichnungen zu gefüllten Feldern in der Mail sehen?
So eine Funktion ist mir nicht bekannt und ich konnte bei contactform7.com auch nichts dazu finden…
Wenn Du allerdings eine Lösung gefunden hast, würde ich mich freuen, wenn Du diese hier postest.
Grüße,
Jörg