Zum Inhalt springen
Startseite » CF7 Snippets » CF7 erstellt neuen Beitrag

CF7 erstellt neuen Beitrag

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 Feld your-subject gezogen. 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.