CF7-Formularwerte dynamisch ändern

Lesezeit: 3 Minuten

Benutzeravatar von DeFeNdog
DeFeNdog

Ich habe versucht, CF7-Formularfelder dynamisch zu ändern ohne die dynamische Texterweiterung Contact Form 7 zu verwenden. Ich habe eine Menge Artikel darüber gesehen, wie man gepostete Daten erhält, nur nicht darüber, wie ich vorhandene Werte überschreiben kann. Mein Ziel ist es, den Dateianhang dynamisch zu ändern und andere Metadaten hinzuzufügen, die mit jedem Beitrag verknüpft sind. Ist das möglich? Vielen Dank!

Hier ist, was ich bisher habe:

function wpcf7_custom_before_send(&$cf7) {
    if ( $cf7->id == 4 ) {
        $submission = WPCF7_Submission::get_instance();
        if ( $submission ) {
            $data =& $submission->get_posted_data();
            // how do I overwrite posted data?
        }
    }
}
add_action("wpcf7_before_send_mail", "wpcf7_custom_before_send");

Sie können dazu meinen Code verwenden. Einige Erklärungen für Ihren Code:

1) Seit id $cf7->id Eigentum ist nicht mehr zugänglich. Verwenden Sie stattdessen die Methode id() $cf7->id().

2) Keine Notwendigkeit verwenden & für Rückruf $cf7 und $submission. Verwenden Sie dazu return.

add_action("wpcf7_before_send_mail", "wpcf7_do_something");

function wpcf7_do_something($WPCF7_ContactForm)
{

    if (224 == $WPCF7_ContactForm->id()) {

        //Get current form
        $wpcf7      = WPCF7_ContactForm::get_current();

        // get current SUBMISSION instance
        $submission = WPCF7_Submission::get_instance();

        // Ok go forward
        if ($submission) {

            // get submission data
            $data = $submission->get_posted_data();

            // nothing's here... do nothing...
            if (empty($data))
                return;

            // extract posted data for example to get name and change it
            $name         = isset($data['your-name']) ? $data['your-name'] : "";

            // do some replacements in the cf7 email body
            $mail         = $wpcf7->prop('mail');

            // Find/replace the "[your-name]" tag as defined in your CF7 email body
            // and add changes name
            $mail['body'] = str_replace('[your-name]', $name . '-tester', $mail['body']);

            // Save the email body
            $wpcf7->set_properties(array(
                "mail" => $mail
            ));

            // return current cf7 instance
            return $wpcf7;
        }
    }
}

Das ist alles, wir ändern einige Tags und senden eine E-Mail mit geändertem Tag 😉

  • Ich werde zurückkommen und es als Antwort markieren, sobald ich die Möglichkeit habe, es zu testen. Ich habe vorerst zugestimmt. Vielen Dank!

    – DeFeNdog

    6. November 2014 um 21:47 Uhr

  • Vielen Dank! Dies half mir, einige HTML-Dateien zu dekodieren, bevor sie gesendet wurden

    – Ben

    18. Mai 2018 um 5:56 Uhr

  • Das funktioniert gut für die E-Mail, aber was ist mit Plugins wie Flamingo, die die Datenfelder speichern? Diese erscheinen immer noch unverändert.

    – AuRise

    3. Juli 2018 um 13:45 Uhr

  • Wie kann man den Betreff dynamisch ändern oder den geposteten Betreff erhalten? Beispielsweise kann ich E-Mail-Inhalte sehen $mail['body']. Was ist mit dem Thema

    – Karue Benson Karue

    1. Juni 2020 um 17:24 Uhr

  • @KarueBensonKarue versuche zu sehen, was du drin hast $mail['subject'] und dann ändern, wie Sie wollen.

    – Brotheryura

    3. Juni 2020 um 0:23 Uhr

Da ich Formularempfänger basierend auf ACF-Feldern ändern musste, ist hier eine Lösung zum Kopieren und Einfügen, die auf @Brotheryura-Code basiert.

Es ermöglicht Ihnen, den Empfänger der E-Mail dynamisch zu ändern, ohne versteckte Felder im Frontend zu haben. Fügen Sie es einfach in Ihre Templates functions.php ein und ersetzen Sie die $recipient = ... Teil mit Ihrer eigenen Funktion oder Ihrem eigenen Code, um den neuen Empfänger zu erhalten.

add_action("wpcf7_before_send_mail", "wpcf7_change_recipient");
function wpcf7_change_recipient($WPCF7_ContactForm)
{
    $wpcf7      = WPCF7_ContactForm::get_current();
    $submission = WPCF7_Submission::get_instance();

    //some little magic to get the referers ID
    $recipient  = get_field('mail', url_to_postid(wp_get_referer()));

    if (!empty($recipient))
    {
        if ($submission)
        {
            $data = $submission->get_posted_data();

            // nothing's here... do nothing...
            if (empty($data))
                return;

            // do some replacements in the cf7 email body
            $mail              = $wpcf7->prop('mail');
            $mail['recipient'] = $recipient;

            // Save the email body
            $wpcf7->set_properties(array(
                "mail" => $mail
            ));

            // return current cf7 instance
            return $wpcf7;
        }
    }
}

1402220cookie-checkCF7-Formularwerte dynamisch ändern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy