Contact Form 7 Variable in Textfeld?

  • Schönen guten Abend Community,

    ich bau derzeit eine Webseite und habe ein neues Template in themes/meinTheme/ abgelegt. In dieser .PHP Datei befindet sich ein ein PHP-Script - dort kann der Benutzer einige Werte in einem HTML Formular wählen und über PHP wird ein möglicher "Einkaufspreis" kalkuliert.

    Nun ist es so, dass ich dem Benutzer nachdem er einen Preis kalkuliert hat die Möglichkeit geben möchte sofort eine Anfrage zu schreiben. Das soll über das Contact Form 7 passieren. Der Endpreis der über das Skript kalkuliert wurde, befindet sich in der Variable $result.

    Ich würde gerne ein Textfeld im Contact Form 7 hinzufügen, in dem das Ergebnis welches sich in der oben genannten Variable befindet automatisch reingeschrieben wird.

    Wie genau ist das möglich? Klappt das mit dem Contact Form 7 oder muss ich da ein komplett neues Kontaktformular basteln und ebenfalls in die Templatedatei.php ablegen? Bin da etwas verwirrt, weil woher soll das CF7 wissen, was in dieser Variable steht bzw. das es die Variable überhaupt gibt?

    Freue mich auf jegliche Antworten.

    Einen schönen Abend und liebe Grüße,
    JAY

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Vorab Danke für die Antwort.

    Nein, sorry. Ich benutze das 4.9.8.

    Die Variable befindet sich im Template template1.php. Nur, wie kriege ich von dort aus den redirect zum Formular hin? Hast du da eine gewisse Vorstellung?

  • Da ich nicht weiss, wie Dein template1.php aufgerufen wird und ob vor dem möglichen Redirect schon Ausgaben stattfinden, ist das schwer zu beantworten.

    Üblicherweise im WordPress Kontext via wp_redirect( .. ) oder im einfachen PHP Kontext mit header( 'Location: http://example.com/contact/?your-name=John+Smith' ); o.ä., via JavaScript wäre während der Ausgabe der Seite ein Redirect möglich, kommt eben ganz auf Deine Rahmenbedingungen an.

  • Guten Abendm,

    mein Problem ist scheinbar wohl eher, dass ich nicht weiß wohin der redirect gehen soll. Das CF7 ist ja einfach per Shortcode im Widget eingebunden. Woher soll es also die Information der Variable kriegen? CF7 muss doch irgendeine Datei haben zu der man die Variable "übergeben" kann damit diese im Formular verwendet werden können? Ich bin echt ratlos..

    Grüße

  • Leider sind die Rahmenbedinungen weiterhin sehr dürftig. Dass das CF7 Formular in einem Widget steht, war bisher völlig unklar. Wie Dein Formular angezeigt wird, ist unklar. Wie Deinem Formular die Daten übergeben werden, ist unklar. Redirecte doch einfach mal auf die aktuelle Seite, nur eben mit dem passenden CF7-Parameter.

  • Danke für deine schnellen Antworten.

    Eventuell etwas ausführlicher: Ich habe in einem template1.php ein selbstgeschriebenes PHP Skript eingefügt welches es dem Besucher ermöglicht über ein Formular Checkboxen anzuklicken und somit ein Preis zu errechnen (je nach Konfiguration ein anderer Preis). Alles wird in eine Variable geschrieben, aufaddiert und diese wird dem Besucher nach abschicken des Formulars angezeigt und ausgegeben . Das ganze wird gesendet über POST- nicht über GET.

    Ich habe eine neue Menüseite im Backend erstellt und das passende Template gewählt (Template1.php). Somit wird das Formular auf der neuen Menüseite durch die Template1.php geladen und korrekt dargestellt. Über dem Skript bzw dem Formular wird der Inhalt der Menüseite wiedergegeben - dort habe ich jetzt das CF7 mal per Shortcode eingebunden.. Ich verstehe halt nicht was für ein redirect und wohin dieser gehen soll wenn sich doch alles bereits in Template1.php befindet? Ich kann mir nur denken dass das CF7 nichts mit meinem Skript in der template1.php gemeinsam hat und das Kontaktformular somit die Variable nicht auslesen kann oder kennt. Somit muss ich meine template1.php dort irgendwo im CF7 per include einbinden oder nicht?

  • Das ganze wird gesendet über POST- nicht über GET.

    CF7 Getting Default Values from the Context:

    Zitat

    Available data sources are: get (HTTP GET variables), post (HTTP POST variables), and post_meta (custom fields)

    . Ich verstehe halt nicht was für ein redirect und wohin dieser gehen soll wenn sich doch alles bereits in Template1.php befindet?

    Wie gesagt, zu viele Unklarheiten. Evtl. geht es auch per JavaScript ohne Redirect.

    • In Dein HTML-Formular gibt man Daten ein, dann klickt man auf Senden?
    • Das Ziel beim Absenden ist die Seite mit Deinem Template?
    • Dann kommt der PHP-Code im Template "Template1.php" per $_POST an die Daten?
    • Dann macht der der Code was damit und Du hast am Ende die PHP-Variable $result?
    • Zu dem Zeitpunkt ist der Header von WordPress auf dieser Seite schon gesendet, also wp_head() schon aufgerufen?


    Wenn das alles zutrifft, könnte man das Ergebnis in ein kleines JavaScript verpacken und von PHP aus ausgeben. Das JavaScript sucht sich dann beim Besucher im Browser das Formular innerhalb der gleichen Seite und setzt das Ergebnis in das gewünschte Feld, sowas in der Art, ungetestet:

    Code
    echo "<script>jQuery(document).ready(function(){jQuery('.wpcf7-form input[name=\"your-name\"]').val('" . $result . "');});</script>";
  • Hi

    Korrekt. Trifft alles zu.

    Danke dir. Teste ich morgen mal. Vielleicht klappt's ja endlich. Bin da in dem Gebiet nicht so fit wie du. Ich kenne das nur so, dass ich in anderen php Dateien meine template1 Datei per include inkludieren kann und die vars dann mit bspw. $_POST['var_name'] ausgebe. Und auch dann schließlich ohne Probleme im Kontaktformular anzeigen lassen kann. Da CF7 mir aber nur ein Shortcode gibt den ich im Backend einfügen kann, weiss ich da bis jetzt keine Möglichkeit Felder über Variablen zu füllen. Nun ja. Ich hoffe morgen klappt es. Danke nochmal .

    Grüße

  • Tatsächlich funktioniert. Er sucht das Feld "your-name" und ließt die gesamte var $result aus.

    PHP
    <?php echo "<script>jQuery(document).ready(function(){jQuery('.wpcf7-form input[name=\"your-name\"]').val('" . $result . "');});</script>"; ?>

    @nature225

    Ich habe mir folgendes zusätzliches Plugin geladen: https://de.wordpress.org/plugins/contac…text-extension/
    Anschließend im Kontaktformular über den Editor vom CF7 ein "Dynamic field" hinzugefügt mit folgendem Value: CF7_POST key=’size‘

    Normalerweise sollte es mir ja jetzt den Inhalt anzeigen, der in "Size" eingegeben wurde - oder vertu ich mich da? Er macht es aufjedenfall nicht.

    Gruß

  • Er sucht das Feld "your-name" und ließt die gesamte var $result aus.


    Für Mitleser, es ist umgekehrt, das JavaScript sucht im Browser auf der Seite das Feld "your-name" und schreibt dort die dem Script mitgegebene PHP Variable $result rein.

    Um eine PHP-Variable, die erst während der Ausgabe eines Seitentemplates ermittelt wird, serverseitig einem Feld eines CF7-Formulars "mitzugeben", muss der CF7-Shortcode erst nach dem Ermitteln der PHP-Variable ausgegeben werden und man muss zusätzlich das entspr. Attribut registrieren, dann geht sowas wie das hier, ungetestet [FONT=Courier New]<?php echo do_shortcode( '[contact-form-7 ... your-name="' . $result . '"]' ); ?>[/FONT]

    Die Voraussetzungen sind aber in diesem Fall nicht gegeben, es wurde z.B. gesagt, das CF7 Formular wäre in einem Widget o.ä., daher ist das hinfällig.

  • Huhu,

    danke. Das Widget wird doch hier geladen wenn ich mich nicht täusche (nach dem PHP-Script im selben Template.php)

    PHP
    <?php if( sidebar_exist('PagesSidebar5') ) { get_sidebar('PagesSidebar5'); } ?>

    Das CF7 befindet sich in der Sidebar5, also der Shortcode. Somit müsste das CF7 welches sich in der Sidebar befindet die var $result doch kennen - oder täusche ich mich?

    Gruß

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!