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

UPDATE: Daten via Contact Form 7 als Beitrag speichern

Damit das untenstehende Snippet funktioniert, brauchst du min. Version 3.9 von Contact Form 7!

Für ein Projekt war es notwendig eingegangene Anfragen aus einem Contact Form 7 Formular als Beitragsentwurf anzulegen. Es handelte sich hierbei um ein Formular, welches für eine Teilnahme an einem Voting bestimmt war. Nach Absenden soll das ausgefüllte Formular (Benutzername, Alter, Bild) als Entwurf in einem Post Type angelegt werden.

Contact Form 7 ist ein hervorragendes und von uns gern genutztes Plugin. Gegenüber Gravity Forms (welches natürlich auch sehr zu empfehlen ist) ist Contact Form 7 sehr einfach gehalten aber dennoch ernorm Erweiterungsfähig.

Viele sind der Meinung das die oben genannte Funktion nur mit Gravity Forms Möglich ist, das ist so nicht richtig. Mit einem kleinen wunderbaren Snippet ist das auch mit Contact Form 7 kein Problem.

Es gibt eine Funktion/Filter in Contact Form 7, welche vor dem Absenden der Anfrage an den Empfänger bearbeitet wird, die sogenannte wpcf7_before_send_mail. An dieser Stelle müssen wir eingreifen und mit einem Snippet deklarieren was genau mit der Anfrage noch passieren soll. Ich habe ein kleines Snippet geschrieben, welches die Daten aus der Abfrage abfängt und in einen Entwurf (Beitrag, Seite oder Post Type) verwandelt und danach die Anfrage ganz normal versendet wird.

Dieses Snippet könnt Ihr einfach in die functions.php einfügen oder ein beliebiges Snippet Plugin dafür verwenden (z.B: Code-Snippets). Natürlich könnt Ihr daraus auch ein Plugin erstellen. Ich habe am Ende des Beitrages eine Vorlage für euch erstellt.

function wpcf7_to_post($cfdata) {
	// Daten aus der Anfrage auslesen
	$submission = WPCF7_Submission::get_instance();
	if ( $submission ) {
		$formdata = $submission->get_posted_data();
	}
    
    // Post ID des Formulares angeben, welches "abgefangen" werden soll
    if ( $cfdata->id() == '123') {
        $newdraft = array(
            'post_title'=> $formdata['name'],
			'post_status' => 'draft', // Status
            'post_type' => 'post', // Post Type
		);

        // Eintrag als Entwurf anlegen
		$newpostid = wp_insert_post($newdraft);

        // Hier werden zustzlich Customfields befllt
		add_post_meta($newpostid, 'customfield01', $formdata['strasse']);
		add_post_meta($newpostid, 'customfield02', $formdata['plzort']);
    }
}
add_action('wpcf7_before_send_mail', 'wpcf7_to_post',1);

Was passiert hier genau?

$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
	$formdata = $submission->get_posted_data();
}

An dieser Stelle werden die Nutzereingaben in eine Variable gespeichert. Das ist einer der Hauptänderungen, welche mit der Version 3.9 veröffentlich wurden.

Ihr könnt einfach anhand des Namen des Feldes den eingegebenen Wert ausgeben:

$formdata['mein_cf7_feld'];

Die Namen wählt Ihr beim Erstellen eines neuen Feldes. (z.B: [mein_cf7_feld])

// Post ID des Formulares angeben, welches "abgefangen" werden soll
if ( $cfdata->id() == '123') {
	$newdraft = array(
		'post_title'=> $formdata['name'],
		'post_status' => 'draft', // Status
		'post_type' => 'post', // Post Type
	);

	// Eintrag als Entwurf anlegen
	$newpostid = wp_insert_post($newdraft);

	// Hier werden zustzlich Customfields befllt
	add_post_meta($newpostid, 'customfield01', $formdata['strasse']);
	add_post_meta($newpostid, 'customfield02', $formdata['plzort']);
}

In der if-Abfrage wird geprüft ob es sich um das gewünschte Formular handelt, falls ja wird mit der Funktion wp_insert_post() ein neuer Beitrag in einem gewünschten Post Type angelegt. Diese Funktion ist natürlich noch stark erweiterbar, mehr Informationen hierzu findet Ihr im Codex von WordPress.

Nachdem der Beitrag, in diesem Fall als Entwurf, erfolgreich angelegt wurde, kann man z.B. noch Customfields befüllen. Hierzu verwendet man einfach die Funktion add_post_meta().

Das war’s schon! Mit diesem kleinen wunderbaren Snippet wird jede Anfrage in einen Entwurf umgewandelt, sehr praktisch und auch sehr einfach.

Das Snippet erweitern

Diese Funktion ist natürlich ganz leicht erweiterbar, ihr könntet z.B. ein mit dem Formular versendetes Bild als Artikelbild setzen. Auch hierfür habe ich etwas vorbereitet. Einfach geringfügig an eure Bedürfnisse anpassen und in das obige Snippet mit einfügen:

// Bild in die Mediathek kopieren/hochladen
$random = date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000)).rand(0,10000);
$uploaded_files = $submission->uploaded_files();
$cf7_image = $uploaded_files['file-772'];
$cf7_image_clean = "/".$random.str_replace("/www/htdocs/absoluter/pfad/zu/wp/wp-content/uploads/cf7_images/","",$cf7_image);
$wp_upload_dir = wp_upload_dir();
copy($cf7_image, $wp_upload_dir['path'].'/'.$cf7_image_clean);

$wp_filetype = wp_check_filetype($wp_upload_dir['path'].'/'.$cf7_image_clean, null);
$attachment = array(
	'post_mime_type' => $wp_filetype['type'],
	'post_title' => sanitize_file_name($cf7_image_clean),
	'post_content' => '',
	'post_status' => 'inherit'
);

$image_id = wp_insert_attachment($attachment, $wp_upload_dir['path'].'/'.$cf7_image_clean, $newpostid);
require_once(ABSPATH . 'wp-admin/includes/image.php');
$image_data = wp_generate_attachment_metadata($image_id, $wp_upload_dir['path'].'/'.$cf7_image_clean);
wp_update_attachment_metadata($image_id, $image_data);

// Bild als Beitragsbild setzen
set_post_thumbnail($newpostid, $image_id);

Das ganze sieht erstmal sehr kompliziert aus, ist aber sehr einfach. Zunächst muss das Bild in die Mediathek von WordPress kopiert bzw. hochgeladen werden, da wir ein Bild nur als Beitragsbild setzen können, wenn es auch in der Mediathek ist.

Ich habe (der Übersicht zu Liebe) einen Unterordner „cf7_images“ im Upload Ordner von WordPress erstellt, dort werden dann alle Bilder abgelegt. Nach dem das Bild in die Mediathek hochgeladen wurde, können wir es mit der Funktion set_post_thumbnail() dem so eben erzeugten Beitrag zuordnen.

Zusammengefasst

Und hier nochmal das komplette Snippet inkl. Bilderupload in der Übersicht:

function wpcf7_to_post($cfdata) {
   // Daten aus der Anfrage auslesen
	$submission = WPCF7_Submission::get_instance();
	if ( $submission ) {
		$formdata = $submission->get_posted_data();
	}
    
    // Post ID des Formulares angeben, welches "abgefangen" werden soll
    if ( $cfdata->id() == '123') {
        $newdraft = array(
            'post_title'=> $formdata['name'],
			'post_status' => 'draft', // Status
            'post_type' => 'post', // Post Type
		);

        // Eintrag als Entwurf anlegen
		$newpostid = wp_insert_post($newdraft);

        // Hier werden zustzlich Customfields befllt
		add_post_meta($newpostid, 'customfield01', $formdata['strasse']);
		add_post_meta($newpostid, 'customfield02', $formdata['plzort']);

		// Bild in die Mediathek kopieren/hochladen
		$random = date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000)).rand(0,10000);
		$uploaded_files = $submission->uploaded_files();
		$cf7_image = $uploaded_files['file-772'];
		$cf7_image_clean = "/".$random.str_replace("/www/htdocs/absoluter/pfad/zu/wp/wp-content/uploads/cf7_images/","",$cf7_image);
		$wp_upload_dir = wp_upload_dir();
		copy($cf7_image, $wp_upload_dir['path'].'/'.$cf7_image_clean);

		$wp_filetype = wp_check_filetype($wp_upload_dir['path'].'/'.$cf7_image_clean, null);
		$attachment = array(
			'post_mime_type' => $wp_filetype['type'],
			'post_title' => sanitize_file_name($cf7_image_clean),
			'post_content' => '',
			'post_status' => 'inherit'
		);

		$image_id = wp_insert_attachment($attachment, $wp_upload_dir['path'].'/'.$cf7_image_clean, $newpostid);
		require_once(ABSPATH . 'wp-admin/includes/image.php');
		$image_data = wp_generate_attachment_metadata($image_id, $wp_upload_dir['path'].'/'.$cf7_image_clean);
		wp_update_attachment_metadata($image_id, $image_data);

		// Bild als Beitragsbild setzen
		set_post_thumbnail($newpostid, $image_id);
    }
}
add_action('wpcf7_before_send_mail', 'wpcf7_to_post',1);

Und für alle, die sowas gerne über Plugins lösen – einfach den folgenden Header über die Funktion packen und unter /wp-content/plugins/cf7-to-post/cf7-to-post.php ablegen und anschließend im Dashboard unter Plugins aktivieren. Ihr könnt den Header auch an euch anpassen – ist mir egal ;-)

/*
Plugin Name: CF7: Anfragen als Beitrag
Plugin URI: http://drwp.de/daten-aus-kontaktformular-als-beitrag-speichern-mit-contact-form-7/
Description: Dieses Plugin sorgt dafr das Anfragen aus Contact Form 7 als Beitrag angelegt werden knnen. Bitte vorher an die eigenen Bedrfnisse anpassen.
Version: 1.0
Author: endcore/ MEDIENAGENTUR
Author URI: http://endcore.com/
*/

Ich hoffe ich konnte euch mit der Funktion weiterhelfen. Sollte Ihr noch Fragen haben oder Probleme mit dem Snippet, fragt mich einfach.


Contact Form 7 Download

Ü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

34 Kommentare

Avatar von Vera T.

Vera T. 19. Juli 2013 um 17:55

Hallo und Danke für den informativen Beitrag.
Auf die Idee muss man erstmal kommen. Wird direkt abgespeichert und kommt sicher mal zum Einsatz.

Lg Vera

Antworten
Avatar von Torsten

Torsten 13. November 2013 um 14:06

Hallo, ich habe die Funktion getestet und es funktioniert super! Danke. Leider aber nur, wenn ich eingeloggt bin. Gibt es eine Möglichkeit, dass neue Besucher, die sich nicht angemeldet haben in meinem Blog auch diese Funktion nutzen können?
Danke für deine Hilfe.

Antworten
Avatar von Christian Lang

Christian Lang 13. November 2013 um 14:11

Hallo Torsten,

das Formular müssten auch nicht angemeldete User nutzen können, sofern die Seite auf der das Formular liegt, nicht als Privat markiert ist.

Viele Grüße
Christian

Antworten
Avatar von Torsten

Torsten 22. Januar 2014 um 8:41

Hallo Christian, das Snippet funktioniert. Vielen Dank für diese Beschreibung. Ich hätte es gern erweitert. Ich nutze das Plugin All in One SEO und möchte es gern auch mit befüllt haben. D.h., wenn jemand das Formular ausfüllt, sollen einige dieser Einträge abgespeichert werden und als Meta-Daten verwendet werden (description, keywords). Kannst du mir dabei helfen?
Viele Grüße
Torsten

Avatar von Christian Lang

Christian Lang 22. Januar 2014 um 19:00

Hi Torsten,

bei Yoast SEO wäre das wohl kein Problem. Da kann man mit einer Funktion die Description und weitere Felder setzen. Bei All in one Seo habe ich aktuell noch nichts gefunden, sorry. Frag am besten mal im Forum (Support) nach ob es die Möglichkeit gibt die Daten via Function oder hook zu bearbeiten. :)

Viel Erfolg

Gruß
Christian

Avatar von Judith

Judith 12. Februar 2014 um 13:09

Hallo,

es funktioniert echt super und ist sehr(!) praktisch. Aber wie lese ich den Wert von Auswahlmenüs oder Checkboxen aus? Einfach nur den Namen eintragen? Also $formdata[‚menu-name‘], oder läuft es da anders?

Vielen Dank und liebe Grüße

Antworten
Avatar von Judith

Judith 12. Februar 2014 um 13:27

Kleiner Zustatz: es geht speziell um Auswahlmenüs mit Mehrfachauswahl.
Entschuldigung :)

Antworten
Avatar von Christian Lang

Christian Lang 14. Februar 2014 um 9:19

Hallo Judith,

genau. Einfach nur den Namen des SELECT angeben. Wie bei einem Input. Wenn es mehrere Einträge/Auswahlmöglichkeiten gibt, bekommst du ein Array mit den Werten zurück!

Viele Grüße
Christian

Antworten
Avatar von Harald Krause

Harald Krause 20. Februar 2014 um 6:34

Wirklich tolle Idee, Dein Bericht hat mir gerade sehr geholfen. Kann man auch auf bereits existierende E-Mail Adressen prüfen und dann einen Fehler auslösen so das das Formular dies auch anzeigt?
Zum Beispiel so „E-Mail Adresse bereits vorhanden!“

Antworten
Avatar von Christian Lang

Christian Lang 20. Februar 2014 um 7:34

Hallo Harald,

das sollte Möglich sein. Schau dir dazu mal bitte die folgende Funktion an:

http://codex.wordpress.org/Function_Reference/email_exists
und
http://wordpress.org/support/topic/wpcf7_before_send_mail-stop-email-on-error

Alternativ kannst du mit jQuery ein Ajax Event auf den Submitt Button legen und dort via PHP File prüfen ob die Adresse vorhanden ist (mail_exists), falls ja, einfach eine Meldung ausgeben und das Senden unterbinden.

Gruß
Christian

Antworten
Avatar von Torsten

Torsten 20. März 2014 um 8:52

Wie ist es möglich, im Beitragstitel automatisch Sonderzeichen wie zum Beispiel einen Bindestrich und Leerzeichen zu entfernen? Wenn im Formularfeld, was als Beitragstitel verwendet wird, ein Bindestrich verwendet wird, soll der nicht mit im Beitragstitel erscheinen. Wie geht das?

Antworten
Avatar von Christian Lang

Christian Lang 20. März 2014 um 13:22

Hi Torsen,

schau dir mal diese Funktion an:

http://codex.wordpress.org/Function_Reference/sanitize_title

Bindestriche bekommst du dann mit

http://www.php.net/manual/de/function.addcslashes.php

weg!

Gruß
Christian

Antworten
Avatar von Torsten

Torsten 1. April 2014 um 13:07

Hallo :)
Ich habe noch eine Frage: Wie kann ich den Posttitel mit einem Standartwert + ein Feld aus dem Formular befüllen?

‚post_title’=> $formdata[’name‘],

Im Titel soll (als Beispiel) immer „Titel“ + Formularfeld [’name‘] erscheinen

Antworten
Avatar von Christian Lang

Christian Lang 2. April 2014 um 11:51

Hallo Torsten, du hast das schon fast richtig, die Syntax wäre:

'post_title' => 'Dein Standardwert ' . $formdata['feld_name'],

Das sollte funktionieren!

Viele Grüße
Christian

Antworten
Avatar von Dominik

Dominik 18. April 2014 um 19:59

Hi Christian,

Hab ein paar Fragen an dich als Experte für Contact form:

Nutz selbst das Contact form 7 auf meiner Webseite und bin auch sehr zufrieden damit. Nun hätte ich gerne ein paar Ergänzungen, weiß aber nicht ob das funktionieren kann.
– Je nach Auswahlfeld im Kontaktformular soll ein Bild erscheinen, d.h. wird Artikel 1 ausgewählt soll im Formular das entsprechende Bild erscheinen.
– Gibt es die Möglichkeit dass man die Anfragen direkt und automatisch an ein ERP System sendet?

Vielen Dank schon mal vorab. Wenn du Interesse und Zeit hast gerne auch als Auftrag für dich.

BG

Dominik

Antworten
Avatar von Christian Lang

Christian Lang 19. April 2014 um 12:16

Hallo Dominik,

1) Hmm, das könnte sogar mit http://wordpress.org/plugins/contact-form-7-dynamic-text-extension/ klappen. Ansonsten müsste man da wohl selber mit jQuery ran. Diese Funktion vermisse ich als Standard auch noch in CF7.

2) Kommt nun darauf an, wie dieses ERP die Daten benötigt?

Gruß
Christian

Antworten
Avatar von Torsten

Torsten 28. August 2014 um 8:51

Hi, seit Monaten nutze ich diese tolle Möglichkeit! Leider funktioniert das Script nicht mehr. Es wird zwar beim Absenden des Kontaktformulares ein neuer Entwurf bei WP gespeichert. dieser ist aber leer. Neue benutzerdefinierte Felder werden angelegt, sind aber auch leer. Woran könnte das liegen? An einem update von Contact Form 7?

PS: seit dem Relaunch eurer Seite kann man den Quellcode des Snippets nicht mehr kopieren :( Außerdem erscheinen diese Zeichen im Quellcode "/&quot :(

Antworten
Avatar von Christian

Christian 28. August 2014 um 17:43

Hi Torsten,

das Snippet funktioniert noch, wir setzen es auch hier im Magazin ein. Auch mit der neusten Version. Das klingt eher als würde der neue Post nicht richtig befüllt. Dazu müsste ich mir aber mal deinen Quellcode ansehen.

Danke für den Hinweis, die Zeichen setze ich mal neu. :)

Gruß
Christian

Antworten
Avatar von Torsten

Torsten 3. September 2014 um 11:41

Danke für die Antwort :)
Hier mein Code:
function wpcf7_to_post($cfdata) {
// Daten aus der Anfrage auslesen
$formtitle = $cfdata->title;
$formdata = $cfdata->posted_data;

// Titel des Formulares angeben, welches „abgefangen“ werden soll
if ( $formtitle == ‚auskunft‘) {
$newdraft = array(
‚post_title’=> ‚info ‚ . $formdata[‚tel-111‘],
‚post_status‘ => ‚draft‘, // Status
‚post_type‘ => ‚post‘, // Post Type
);

// Eintrag als Entwurf anlegen
$newpostid = wp_insert_post($newdraft);

// Hier werden zusätzlich Customfields befüllt
add_post_meta($newpostid, ’nummer‘, $formdata[‚tel-111‘]);
add_post_meta($newpostid, ‚bewertung‘, $formdata[‚menu-111‘]);

}
}
add_action(‚wpcf7_before_send_mail‘, ‚wpcf7_to_post‘,1);

________
Das einzigste was ich verändert habe in den letzten Wochen war folgendes: ich habe die Datenbank „aufgeräumt“, d.h. alle Artikel und die dazugehörigen Einträge über phpMyAdmin (Spalten wp_postmeta, wp_posts, wp_term_relationship) gelöscht. Danach habe ich die vorher erstellten Backups (Seiten und einige Artikel) über WP-Dashboad wieder eingespielt, auch das Backup „Kontaktformulare“. Seit dem funktioniert das automatische erstellen nicht mehr. Wie gesagt, es werden nur Artikelentwürfe erstellt ohne Inhalt. Lediglich steht im Posttitel „info“. Wo liegt das Problem?

Avatar von Christian

Christian 3. September 2014 um 12:05

Hi Torsten,

ich konnte das Problem mittlerweile finden. Mit dem Update 3.9 von CF7 wurde einiges geändert, auch der Zugriff auf die Formulardaten innerhalb der PHP Funktion. Ich werde diese Änderung so schnell wie Möglich in dem Artikel korrigieren und erklären.

Du hast nun 2 Möglichkeiten:

1) Du wartest bis ich die Änderungen im Blog habe und downgradest vorerst auf eine CF7 unter 3.9, also die letzte 3.8.x Version. Dann klappt mein Snippet wieder.

2) Du kannst n bissl PHP und liest dir das hier durch: http://contactform7.com/2014/07/02/contact-form-7-39-beta/

Im Endeffekt musst du die Formulardaten vor Ausgabe erstmal hiermit initiieren:

$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
    $formdata = $submission->get_posted_data();
}

Danach kannst du mit $formdata wie gewohnt die Daten abfragen.

Der Teil

$formdata = $cfdata->posted_data;

fällt dann bei dir weg.

Ich hoffe ich konnte dir so helfen.

Gruß
Christian

Avatar von Michael

Michael 18. November 2014 um 13:12

Hallo!

Ich wurde in der Googe Plus Gruppe ‚Wordpress Deutschland ‚ auf diesen Beitrag hingewiesen und habe genau das gefunden was ich brauche! Vielen herzlichen Dank für den tollen Beitrag – ich werde ihn natürlich weiter teilen! Liebe Grüße aus Österreich – Michael

Antworten
Avatar von André

André 19. November 2014 um 9:59

Hey Michael,

danke für das Feedback. Schön zu sehen, das unsere Artikel die Runde machen. Schau doch auch mal in unserer Facebook Gruppe vorbei: https://www.facebook.com/groups/wordpressundseo/ :)

Gruß
André

Antworten
Avatar von maltris

maltris 4. Dezember 2014 um 21:49

Dr. WP – bester Mann.

Vielen Dank!

Antworten
Avatar von heike

heike 14. Januar 2015 um 13:09

Hallo Christian,
ein toller Beitrag. Danke!
Der erste Teil funktioniert, nur mit dem Bilderupload habe ich Probleme und weiß leider nicht, was ich noch anpassen muss im Code.
Im ersten Teil habe ich schon „post_content“ verwendet, kann ich dann im Bilderupload ‚inherit‘ verwenden?
Kann es sein, dass bei “ ‚post_status‘ => ‚inherit‘ “ noch ein Komma danach fehlt?
Den Ordner „cf7_images“ habe ich unter /multimediaprojekte/wp-content/uploads bereits erstellt.

Das ist der Code
// Bild in die Mediathek kopieren/hochladen
$random = date(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000)).rand(0,10000);
$uploaded_files = $submission->uploaded_files();
$cf7_image = $uploaded_files[‚file-772‘]];
$cf7_image_clean = „/“.$random.str_replace(„/multimediaprojekte/wp-content/uploads/cf7_images“,““,$cf7_image);
$wp_upload_dir = wp_upload_dir();
copy($cf7_image, $wp_upload_dir[‚path‘].’/‘.$cf7_image_clean);

$wp_filetype = wp_check_filetype($wp_upload_dir[‚path‘].’/‘.$cf7_image_clean, null);
$attachment = array(
‚post_mime_type‘ => $wp_filetype[‚type‘],
‚post_title‘ => sanitize_file_name($cf7_image_clean),
‚post_content‘ => ‚ ‚,
‚post_status‘ => ‚inherit‘, // Fehlte hier ein Komma?
);

$image_id = wp_insert_attachment($attachment, $wp_upload_dir[‚path‘].’/‘.$cf7_image_clean, $newpostid);
require_once(ABSPATH . ‚wp-admin/includes/image.php‘);
$image_data = wp_generate_attachment_metadata($image_id, $wp_upload_dir[‚path‘].’/‘.$cf7_image_clean);
wp_update_attachment_metadata($image_id, $image_data);

// Bild als Beitragsbild setzen
set_post_thumbnail($newpostid, $image_id);

Vielen Dank und liebe Grüße
Heike

Antworten
Avatar von Christian

Christian 16. Januar 2015 um 9:10

Hi Heike,

da fehlt kein Komma. An der letzten Stelle wird hier keines benötigt.

Hast du mal geprüft ob die Schreibrechte auf deinem Ordner stimmen? 777 muss gesetzt sein. Das kannst du mit einem FTP Tool (z.B. FileZilla) checken.

Gruß
Christian

Antworten
Avatar von Maik

Maik 3. Februar 2015 um 13:33

Hallo,

vielen Dank für diesen Beitrag. Die Funktion ist für mein Vorhaben – Kundenmeinungen zu sammeln und auszugeben – geradezu perfekt. Allerdings bekomme ich nach dem absenden keine Benachrichtigung. Viel mehr dreht sich das Rädchen weiter und weiter. Der Beitrag wird jedoch korrekt an der gewünschten Stelle als Entwurf abgelegt.
Hier der Code: http://pastebin.com/1vzy64qP

Antworten
Avatar von Maik

Maik 3. Februar 2015 um 14:08

Ich habe eben festgestellt, dass es mit dem Bilderupload Probleme gibt. Ohne den Teil für den Bilderupload funktioniert alles.

Antworten
Avatar von Christian

Christian 4. Februar 2015 um 15:08

Hi Maik,

schau mal in die Error_Log, findest du da einen Eintrag?

Ggf. gibt es Probleme mit den Schreibrechten im Uploads Ordner.

Gruß
Christian

Antworten
Avatar von Frank

Frank 20. Februar 2015 um 14:59

Hallo,
das ist ein Superding, aber ich bekomme es irgendwie nicht weiter;
ich will bis zu drei Bildern (Ausrichtung wäre gut) in das Post einbauen und alle (erlaubten)
Kategorien ‚checken‘.
Was müßte ich in das php einbauen?
Beste Grüße

Antworten
Avatar von Stevetura

Stevetura 2. Februar 2016 um 11:33

Hallo, echt super genaial. Hat geklappt leider nicht bei Custom Field die einträge werden nicht übernommen. Ich arbeite mit Custom Field Suite Plugin. Ich habe in der funktion.php Post Type „feuerwehrliste“ angelegt. post_titel / post_content werden als Entwurf in der Post Type „Feuerwehrliste“ gespeichert und angezeigt. Nur die add_post_meta($first_name, ‚bp_feuerwehr_titel‘, $formdata[‚cfbp_feuerwehr_titel‘]); bleiben leer. Habt Ihr eine idee?

function wpcf7_to_post33($cfdata) {
// Daten aus der Anfrage auslesen
$submission = WPCF7_Submission::get_instance();
if ( $submission ) {
$formdata = $submission->get_posted_data();
}

// Post ID des Formulares angeben, welches „abgefangen“ werden soll
if ( $cfdata->id() == ‚6‘) {
$cfs = array(
‚post_title’=> $formdata[‚cf_hiereinname‘],
‚post_content’=> $formdata[‚cfbp_feuerwehr_beschreibung‘],
‚post_status‘ => ‚draft‘, // Status
‚post_type‘ => ‚feuerwehrliste‘, // Post Type
);

// Eintrag als Entwurf anlegen
$first_name = wp_insert_post($cfs);

// Hier werden zustzlich Customfields befllt
add_post_meta($first_name, ‚bp_feuerwehr_titel‘, $formdata[‚cfbp_feuerwehr_titel‘]);
add_post_meta($first_name, ‚bp_feuerwehr_ort‘, $formdata[‚cfbp_feuerwehr_ort‘]);
add_post_meta($first_name, ‚bp_feuerwehr_strasse‘, $formdata[‚cfbp_feuerwehr_strasse‘]);
add_post_meta($first_name, ‚bp_feuerwehrtype‘, $formdata[‚cfbp_feuerwehrtype‘]);
}
}
add_action(‚wpcf7_before_send_mail‘, ‚wpcf7_to_post33‘,1);

Antworten
Avatar von Erwin

Erwin 24. März 2016 um 17:18

Hallo, ich würde gern die aktuelle Version dieses Snippet nutzen. Leider kann ich den Code nicht kopieren von dieser Website. Bin ich zu doof? Ich habe es mit Firefox und Chrome probiert. Liegt das an meinem PC(Mac)

Antworten
Avatar von torsten

torsten 28. März 2016 um 12:22

Hallo, ich nutze WP und Contact Form in der neusten Version. Zusätzlich habe ich das Plugin Frontend Registration – Contact Form 7 installiert. Ich möchte jetzt mein Hinzufügen einen neuen Beitrages, das gleichzeitig ein neuer Benutzer hinzugefügt wird. Das funktioniert soweit gut mit dem Plugin (es wird auch die richtige Role zugewiesen). Um den neuen Beitrag dem neuen Benutzer zuzuweisen habe ich den Code probiert:

‚post_title’=> $formdata[‚tel-480‘],
‚post_author‘ => $formdata[‚text-19‘],
‚post_status‘ => ‚draft‘, // Status

Leider funktioniert das nicht. Der neue Beitrag wird hinzugefügt aber nicht dem neuen Benutzer zugeordnet.

Antworten
Avatar von Christian

Christian 15. April 2016 um 16:47

Hi Torsten,

„post_author“ erwartet eine ID (die des Benutzers). Dann wird es gehen!

Antworten
Avatar von Steffi

Steffi 12. Januar 2017 um 16:44

Hallo Christian,
diese Anleitung ist super, vielen Dank!!! Ich habe die Funktion eingebaut und die neuen Posts werden erstellt, mit befüllten custom fields und allem, klappt wunderbar.
Mein einziges Problem:
Nachdem ein User das Formular ausgefüllt hat und abschickt, wird unter dem Formular „vielen Dank für Ihre Anmeldung “ eingeblendet – jetzt passiert im Frontend auf der Formularseite gar nichts mehr, der User kann nicht sehen, dass das Formular abgeschickt wurde. Kann es sein, dass „wpcf7_before_send_mail“ das irgendwie behindert? Wenn ja, wie kann man das beheben?

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.
*
*