Unser Affiliate Theme ist da! Spare 10% mit dem Gutschein DRWP10 - mehr erfahren!

Contact Form 7 als Registrierungsformular verwenden

In unserer WordPress-Gruppe kam schon oft die Frage auf, wie man Contact Form 7 für ein Registrierungsformular verwenden kann. Für ein Projekt musste ich kürzlich erst so eine Funtkion umsetzen und möchte euch den Quellcode hierfür nicht vorenthalten.

Vorbereitungen im Formular

Zunächst müsst Ihr ein simples Formular in Contact Form 7 erstellen. Hierfür wären folgende Felder sinnvoll:

  • Benutzername (Textfeld)
  • E-Mail Adresse (E-Mail Feld – wichtig!)
  • Passwort (optional, kann auch Zufällig generiert werden)

Das Formular würde dann z.B. so aussehen:

Ihr Name (Pflichtfeld)
[text* benutzername]

Ihre E-Mail-Adresse (Pflichtfeld)
[email* email]

Passwort
[text* passwort]

[submit "Registrieren"]

Eingabe als Benutzer in der Datenbank anlegen

Sobald Ihr das Formular für eure Zwecke erstellt habt, müssen wir den Benutzer nach erfolgreicher Eingabe aller Felder in der Datenbank als Benutzer hinzufügen. Hierfür verwendet man am sinnvollsten den Hook wpcf7_before_send_mail. In diesem Hook können wir die Daten verarbeiten bevor das Formular entgültig „abgefeuert“ wird.

Hier für bitte das folgende Snippet in die functions.php laden und ggf. anpassen:

function wpcf7_add_user_to_db($cfdata) {
/*
* Registrieren
*/
if ($cfdata->id() == '1199') { // Bitte die ID des Formulars (Postid) einsetzen
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
$posted_data = $submission->get_posted_data();
}

$benutzername = $posted_data['benutzername'];
$email = $posted_data['email'];
$passwort = $posted_data['passwort'];

if($email) {
//$random_password = wp_generate_password($length=12, $include_standard_special_chars=false); // Zuflliges Passwort generieren, sofern notwendig.
$user_id = wp_create_user($benutzername, $passwort, $email);
}
}
}
add_action('wpcf7_before_send_mail', 'wpcf7_add_user_to_db',1);

In diesem Schritt werden, wie schon angesprochen, die Daten des Formulars abgefangen und entsprechend verarbeitet. Sofern das Feld „E-Mail Adresse“ auch wirklich ausgefüllt wurde, wird ein Benutzer im System angelegt. Danach wird das Formular abgefeuert. Sofern Ihr kein Passwortfeld benutzt, könnte man auch ein Passwort automatisch generieren lassen, was ich persönlich besser finde.

Bitte beachtet das Ihr ggf. die Werte im Array $posted_data an euere Feldnamen anpassen müsst.

Prüfen ob eine E-Mail Adresse bereits registriert wurde

Contact Form 7 bietet die Möglichkeit eigene Validierungen anzulegen. Das eignet sich sehr, um die E-Mail Adresse vor Absenden zu validieren . Wir können also prüfen ob die E-Mail bereits im System registriert wurde und können so ggf. Fehler der Funktion wp_create_user() abfangen und dem User kommunizieren.

Verwendet hierzu folgendes Snippet in der functions.php:

/*
* VALIDATE E-MAIL
*/
function wpcf7_check_email($result, $tag) {
$name = $tag['name'];
$user_email = $_POST[$name];

if(email_exists($user_email)) {
$result['valid'] = false;
$result['reason'][$name] = 'Es existiert bereits ein Konto mit dieser E-Mail Adresse.'; // Ausgabe kann hier angepasst werden
}

return $result;
}
add_filter('wpcf7_validate_email*', 'wpcf7_check_email', 10, 2);
add_filter('wpcf7_validate_email', 'wpcf7_check_email', 10, 2);

Wenn der User das Formular absendet und die E-Mail Adresse bereits im System hinterlegt wurde, bekommt er eine Fehlermeldung angezeigt. Diese Validierung tritt in Kraft, bevor die Daten in die Datenbank gespeichert werden.

Ich hoffe ich konnte euch mit diesem kleinen Snippet weiterhelfen – Fragen gerne in die Kommentare!

Hinweis: Dieses Snippet funtkioniert nur mit der neusten Version von Contact Form 7 (>= 3.9)

Über Christian

Die Webentwicklung ist seit 2006 ein großer Teil meines Lebens und seit 2010 kann ich damit auch meine Brötchen verdienen. Ich beschäftige mich speziell mit WordPress und entwickle auch eigene Themes. Die Anpassungsfähigkeit von Wordpress begeistert mich immer wieder, daher möchte ich euch interessante Snippets und Plugins nicht vorenthalten.

WordPress Affiliate ThemeAnzeige

13 Kommentare

Avatar von Ralf Dahler

Ralf Dahler 10. Oktober 2014 um 14:17

vielen Dank für den nützlichen Beitrag Christian – diese Möglichkeit hab ich noch nie in Betracht gezogen, aber du hast mich damit auf neue Ideen gebracht :-)
LG, Ralf

Antworten
Avatar von Christian

Christian 10. Oktober 2014 um 14:20

sehr gerne – freut mich wenn ich helfen konnte.

Antworten
Avatar von Sebastian Latajka

Sebastian Latajka 10. Oktober 2014 um 16:26

Hallo Christian, danke für den Beitrag!

So etwas in der Art hatte ich letztens gesucht. Aber dann wieder verworfen.
Mit war es nämlich nicht gelungen die nötigen Einstellungen zu finden um einem angemeldeten User „mehr“ Inhalte zu zeigen, als dem Anonymen.
Beispielsweise wollte ich als „Erweiterung zu einem Artikel“ einem angemeldeten User zugang zu einem YouTube-Video gewähren. (Nur mal so als einfaches Beispiel)
Mir fehlte es jedoch da, offenbar an grundlegendem WordPress-Wissen.
Hast du da evtl. auch den ein oder anderen Limk oder Beitrag zu?

Nichtsdestotrotz kommt dieser Beitrag hier auf jeden Fall mal abgespeichert ;) … man weiß ja nie…

LG

Antworten
Avatar von Christian

Christian 10. Oktober 2014 um 17:32

Hi Sebastian,

gerne. Das kannst du z.B. mit der Funktion is_user_logged_in() nutzen. http://codex.wordpress.org/Function_Reference/is_user_logged_in

Mit der PHP Funktion kannst du eingeloggte Nutzer ansprechen, z.B. so:

<?php if(is_user_logged_in()) { ?>
   <div class="content">Dieser Text ist nur fr eingeloggte Sichtbar!</div>
<?php } ?>

Wenn du das als Shortcode im Beitrag nutzen willst, kannst du daraus auch einen Shortcode erstellen, das wird z.B. hier beschrieben:

http://torstenlandsiedel.de/2013/10/03/eigene-shortcodes-in-wordpress-erstellen/

Viele Grüße
Christian

Antworten
Avatar von Konrad

Konrad 10. Oktober 2014 um 17:38

Danke, habe gerade neulich drüber nachgedacht!

Antworten
Avatar von Felix

Felix 12. April 2015 um 17:26

Hallo Christian.
ist es möglich eine Auswahl an möglichen Rollen bei Registrieren anzuzeigen….bräuchte genau so etwas mit 3 auswählbaren rollen.

Antworten
Avatar von Christian

Christian 13. April 2015 um 8:01

Guten Morgen Felix,

ja das geht. Ich habe dir hierfür ein kleines Snippet erstellt!

http://drwp.de/snippet/contact-form-7-dropdown-mit-werten-aus-der-datenbank-befuellen/

Viel Spaß damit.

Antworten
Avatar von Felix

Felix 8. Mai 2015 um 18:49

Dank dir Christian…hab deine Antwort erst spät mitbekommen…. gleich mal probieren…

Avatar von Christian

Christian 8. Januar 2016 um 10:35

Hallo Christian,

ich habe deine Anleitung befolgt, aber leider funktioniert es nicht so wie gewünscht. Habe deinen Code 1 zu 1 kopiert und in die functions.php im Plugin-Ordner geladen. Es kommt auch eine Mail an, aber in meiner Datenbank werden keine neuen User gelistet. Hab ich irgendwo was falsch gemacht?

Antworten
Avatar von Christian

Christian 8. Januar 2016 um 11:32

Hallo Christian,

ich habe deine Anleitung befolgt, aber leider funktioniert es nicht so wie gewünscht. Das Formular erscheint, so wie ich es erstellt habe ( mit deinen Vorgaben ). Ich fülle es aus und drücke auf Registrieren. Es wird die E-Mail verschickt, aber kein neuer User registriert. Muss ich den Code in die functions.php von contact-form-7 einfügen, oder in die functions.php von wordpress? Könnte ich irgendwo anders einen Fehler gemacht haben?

Antworten
Avatar von Marcel

Marcel 21. Januar 2016 um 14:53

Vielleicht könnt ihr ja mal ein Tutorial schreiben, wie man Contact Form 7 als Gewinnspielformular verwendet?

Antworten
Avatar von Karl

Karl 24. April 2016 um 11:42

super Codebeispiel.
wie mache ich aber jetzt eine Passwortvalidierung. Also Passwort nochmal eingeben und das Formular meckert, wenn die eingaben verschieden sind?

Antworten
Avatar von Christian

Christian 25. April 2016 um 10:33

Hi Karl,

dazu fügst du zwei Felder für Passwörter hinzu:

password
und
password_valid

Danach prüfst du mit einer PHP-Funktion (wie oben Beschrieben) folgendes ob die Eingaben gleich sind, ansonsten kannst du eine Fehlermeldung ausgeben. Ein Beispiel wäre:

http://pastebin.com/zpW6xyew

Antworten

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <strong>, <em>, <u>, <a href="">, <del>, <ul>, <ol>, <blockquote>. Für Code benutze bitte pastebin.com und kopiere den Link in dein Kommentar.
*
*