$_Post im Contact-form-7

  • Hallo,

    ich bin neu hier und froh mal wieder ein Forum gefunden zu haben. Und dazu noch in deutscher Sprache!

    Zu meinem Problem:
    Feedbackformular hat 2 Submit Button. Jetzt will ich nach dem Absenden über die $_POST Variable ermitteln, welcher Button geklickt wurde.
    Wichtige Info hierzu. Ich arbeite mit dem Oxygenbuilder und ohne Theme/Child-Theme.

    Bei einem Formular händisch mit html/ PHP gemacht, bekomme ich über die $_POST das Button zurück geliefert wurde.
    Gleiches HTML-Formular über CF-7 abgefeuert und fehlt bei $_POST der String mit dem Submit namen.

    $_POST Dump


    array(6) {
    ["_wpcf7"]=>
    string(3) "170"
    ["_wpcf7_version"]=>
    string(5) "5.1.9"
    ["_wpcf7_locale"]=>
    string(5) "de_DE"
    ["_wpcf7_unit_tag"]=>
    string(13) "wpcf7-f170-o1"
    ["_wpcf7_container_post"]=>
    string(1) "0"
    ["your-message"]=>
    string(0) ""
    }


    Wer weiß welche Hook ich ansetzen muß, bevor CF-7 den $_POST modifziert?
    wpcf7_before_send_mail und wpcf7_submit habe ich bereits ausprobiert.

    Eine URL zu einer Schemata in welcher Reihenfolge die Hooks abgearbeitet werden wäre auch hilfreich.

    Wer es sich ansehen will, kann gerne hier https://staging.medienhusky.com/husky-letter-abo/ nachschauen und probieren.

    Java-Script oder ein anderes Plugin ist keine Alternative!

    Ich freue mich über jeden Tipp, der mich weiter bringt.

    Danke für Eure Bemühungen.

    • 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

  • Danke für den Tipp, funktioniert leider auch nicht.

    Diese Hooks habe ich bereits erfolglos ausprobiert:
    wpcf7_submit
    wpcf7_before_send_mail
    wpcf7_mail_send

    und

    PHP
    $submission = WPCF7_Submission::get_instance();


    liefert mir zwar alle Formulardaten und deren Inhalte, jedoch der input type="submit" und sein value ist nirgends mehr dabei.

  • Contact Form 7 versendet die Formulare per Javascript in [FONT=Courier New]includes/js/scripts.js[/FONT] und nutzt dort u.a. [FONT=Courier New]new FormData(..)[/FONT] um die Formulardaten zu ermitteln. In diesen Daten ist der Submit Button nicht enthalten.

    Eine Lösungsmöglichkeit wäre ein [FONT=Courier New]hidden[/FONT] Feld im Formular und ein kleines Script mit dem Du auf dem Server in [FONT=Courier New]$_POST['your-button'][/FONT] bzw. falls gewünscht auch in der E-Mail selbst den ID des Buttons bekommst.

    Code
    [submit id:button-1 "Senden 1"]
    [submit id:button-2 "Senden 2"]
    [hidden your-button]
    Code
    jQuery(document).ready(function($) {
        $('.wpcf7-submit').on('click', function(e) {
            $(this).closest('.wpcf7-form').find('[name="your-button"]').val($(this).attr('id'));
        });
    });


    Habe durchaus gelesen, dass für Dich ein Script keine Alternative ist, für Mitleser mag das anders sein, daher hier mal so ein Lösungansatz.


  • Diese Hooks habe ich bereits erfolglos ausprobiert:
    wpcf7_submit
    wpcf7_before_send_mail
    wpcf7_mail_send

    Welche Daten erhälts Du über den Filter Hook wpcf7_posted_data?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Contact Form 7 versendet die Formulare per Javascript in [FONT=Courier New]includes/js/scripts.js[/FONT] und nutzt dort u.a. [FONT=Courier New]new FormData(..)[/FONT] um die Formulardaten zu ermitteln. In diesen Daten ist der Submit Button nicht enthalten.

    Habe durchaus gelesen, dass für Dich ein Script keine Alternative ist, für Mitleser mag das anders sein, daher hier mal so ein Lösungansatz.

    Danke für deinen Tipp! Ich werden jetzt beim Entwickler mal nachfragen, ob er die Funktion wieder einbauen/aktivieren kann. Es hatte zumindest mal funktioniert .

    Auch deinen Lösungsansatz finde ich gut, damit andere auch etwas davon haben. Wenn alle Stricke reißen, werde auch auf Java-Script umsteigen. Ich will mir die Einarbeitungszeit ersparen und ohne Java-Script bleibe ich Browserunabhängiger.

  • Ich habe einen 4 Jahre alten Thread bei cf-7 gefunden, da schien es mal zu funktionieren.


    Vor 4 Jahren wurde noch nicht [FONT=Courier New]FormData(..)[/FONT] beim Versand verwendet, schau Dir den Quellcode z.B. der Version 4.4 des Plugins mal an.

    .. und ohne Java-Script bleibe ich Browserunabhängiger.


    Ohne JavaScript im Browser wird Dein Feld [FONT=Courier New]eintragen[/FONT] auf Deiner Testseite in [FONT=Courier New]$_POST[/FONT] mit an den Server übertragen:

    Code
    _wpcf7=170
    _wpcf7_version=5.1.9
    _wpcf7_locale=de_DE
    _wpcf7_unit_tag=wpcf7-f170-o1
    _wpcf7_container_post=0
    your-message
    eintragen=Ich habe es mir anders überlegt


    Erst mit JavaScript im Browser entsteht durch [FONT=Courier New]FormData(..)[/FONT] der von Dir beschriebene Effekt.

    Allerdings ist in der aktuellen Version von Contact Form 7 ein [FONT=Courier New]name[/FONT] Feld bei Submit-Buttons gar nicht dokumentiert.

  • Wow. Das beruhigt mich jetzt. Dann muss ich halt 2 Versionen für die Button Behandlung machen. Auf die Idee einfach mal im Browser Java-Script abzuschalten bin ich nicht gekommen. Stand zu tief im Wald. :)

    Danke für Deine Hilfe, das bringt mich jetzt weiter!

    Einmal editiert, zuletzt von Olaf (31. Mai 2020 um 22:47)

  • Code
    [submit id:button-1 "Senden 1"]
    [submit id:button-2 "Senden 2"]
    [hidden your-button]
    Code
    jQuery(document).ready(function($) {
        $('.wpcf7-submit').on('click', function(e) {
            $(this).closest('.wpcf7-form').find('[name="your-button"]').val($(this).attr('id'));
        });
    });


    Habe durchaus gelesen, dass für Dich ein Script keine Alternative ist, für Mitleser mag das anders sein, daher hier mal so ein Lösungansatz.

    Leider muss ich das jetzt doch nochmal aufgreifen. Ich komme gerade bei der Auswertung, welcher Button geklickt wurde nicht weiter. Dazu kommt noch, das ich so gut wie kein jQuerie oder javaScript kann.

    Wahrscheinlich ist das nur ein 3 Zeiler für die Abfrage ob "Senden1" oder "Senden2" geklickt wurde. Hier hänge ich, weil ich auch nicht weiß wie ich die Variablen oder das object auslesen kann.

    Kannst Du mir vielleicht mit dem 3-Zeiler aushelfen? Ich würde mich riesig freuen.
    Danke!

  • Der Code steht eigentlich bereits fertig da und kann mit script Tags versehen z.B. mit in das Formularfeld bei Contact Form 7 kopiert werden.


    Dann bekommst Du in [FONT=Courier New]$_POST['your-button'][/FONT] auf dem Server den ID, also hier [FONT=Courier New]button-1[/FONT] oder [FONT=Courier New]button-2[/FONT], wahlweise auch über das Feld [FONT=Courier New][your-button][/FONT] in der Contact Form 7 E-Mail.

  • Herzlichen Dank! Jetzt habe ich das Script kapiert.

    Ich habe seit PHP5.3 nichts mehr damit gemacht und mir JavaScript habe ich nie etwas zu tun gehabt. Das war nie meine Baustelle.

    Eine letzte (hoffentlich) letzte Frage:
    Gibt es ein äquivalent in Javascript zu PHP var_dump()? So das man es sich alles als Alert() ausgeben lassen kann.

  • schau dir mal console.log() an.

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Keine Fehler, auch beim php Debuggen keine Fehler.

    im Supportforum des Entwicklers habe ich jetzt einen Hinweis gefunden, dass es Probleme mit dem redirect geben kann.

    Ich habe mich jetzt um entschieden und setze nun doch auf eine JavaScript-Lösung. Ich will nicht nach jedem Update wieder rumbasteln bis es wieder läuft..

Jetzt mitmachen!

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