Um die Daten eines Contact Form 7 (CF7) Formulars als neuen WordPress-Beitrag zu speichern, kannst du eine benutzerdefinierte Funktion erstellen, die den wpcf7_mail_sent-Hook verwendet, um die übermittelten Formulardaten zu erfassen und als neuen Beitrag in einer bestimmten Post-Typ oder Kategorie zu speichern.
Hier ist ein Beispiel, wie du dies umsetzen kannst:
Schritt 1: Funktion erstellen, die die CF7-Daten als Beitrag speichert
Füge den folgenden Code in die functions.php deines Themes oder in ein eigenes Plugin ein:
function save_all_cf7_data_as_post($contact_form) {
// Hole die Daten aus der Übermittlung
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$posted_data = $submission->get_posted_data();
// Beitragstitel aus einem bestimmten Feld oder einem Standardwert
$title = isset($posted_data['your-subject']) ? sanitize_text_field($posted_data['your-subject']) : 'Neuer Formular-Eintrag';
// Inhalte aus allen Formularfeldern zusammenfügen
$content = '';
foreach ($posted_data as $key => $value) {
if (!is_array($value)) {
$content .= '<strong>' . esc_html($key) . ':</strong> ' . esc_html($value) . "<br />";
} else {
$content .= '<strong>' . esc_html($key) . ':</strong> ' . esc_html(implode(', ', $value)) . "<br />";
}
}
// Erstelle den neuen Beitrag
$new_post = array(
'post_title' => $title, // Titel des Beitrags
'post_content' => $content, // Inhalt des Beitrags mit allen Feldern
'post_status' => 'publish', // Veröffentliche den Beitrag sofort
'post_type' => 'post', // Typ des Beitrags (z.B. 'post' oder 'page')
'post_author' => 1, // ID des Autors (Admin)
);
// Beitrag erstellen und ID abrufen
$post_id = wp_insert_post($new_post);
// Optional: Einzelne Felder als Metadaten speichern
foreach ($posted_data as $key => $value) {
if (!is_array($value)) {
add_post_meta($post_id, '_cf7_' . sanitize_key($key), sanitize_text_field($value), true);
} else {
add_post_meta($post_id, '_cf7_' . sanitize_key($key), sanitize_text_field(implode(', ', $value)), true);
}
}
}
}
add_action('wpcf7_mail_sent', 'save_all_cf7_data_as_post');
Erläuterung des Codes
$title: Der Titel des Beitrags wird standardmäßig aus dem Feldyour-subjectgezogen. Du kannst dies anpassen, um ein anderes Feld zu verwenden oder einen statischen Titel festzulegen.$content: Hier werden alle Formulardaten als HTML-formatierten Inhalt in den Beitrag eingefügt. Jeder Key (also der Name des Formularfelds) und sein Wert werden als eigene Zeile dargestellt.wp_insert_post: Erstellt einen neuen Beitrag mit den übermittelten Daten.add_post_meta: Speichert die übermittelten Daten zusätzlich als benutzerdefinierte Felder (post_meta) zum Beitrag. Dies ist optional, kann aber nützlich sein, wenn du auf diese Daten separat zugreifen möchtest.
Schritt 2: Beitragstyp und -status anpassen (optional)
post_type: Du kannst den Post-Typ ändern, indem du den Wert von'post'auf einen anderen registrierten Post-Typ wie'page'oder einen benutzerdefinierten Post-Typ änderst.post_status: Du kannst den Veröffentlichungsstatus ändern, z. B.'draft'für Entwürfe oder'pending'für ausstehende Beiträge.
Zusammenfassung
Mit dieser Funktion wird jedes Mal, wenn ein Contact Form 7-Formular gesendet wird, ein neuer WordPress-Beitrag erstellt, der alle übermittelten Felder und ihre Daten als Inhalt enthält. Optional werden diese Daten auch als benutzerdefinierte Felder (post_meta) gespeichert, was eine weitergehende Verarbeitung ermöglicht.zifischen Anforderungen deines Projekts zu erfüllen.
