• Resolved mdw77

    (@mdw77)


    Hallo zusammen,

    ich habe einen reproduzierbaren Konflikt zwischen WooCommerce Germanized und einer AJAX-basierten Registrierung im Modal (Theme: Elessi / NASA).

    Sobald Germanized aktiv ist und der Kunde sich über das Registrierungsformular im Modal anmeldet, passiert Folgendes:

    1. Das Formular im Modal schickt einen AJAX-Request an:
      POST /wp-admin/admin-ajax.php
    2. Statt einer AJAX-kompatiblen Antwort kommt:
      HTTP 302 Redirect
      Location: /mein-konto/?show_checkout_notice=yes&account=activate
    3. Anschließend wird per GET die Mein-Konto-Seite geladen (HTML), auf der u.a. folgende Notices erscheinen:
    • „Bitte aktiviere dein Kundenkonto indem du auf den Link in der E-Mail klickst.“
    • „Keine Aktivierungs-E-Mail erhalten? Erneut zusenden“ mit Link:
      ?action=wc-gzd-resend-activation&_wpnonce=…

    Die Registrierung selbst funktioniert, der Account wird angelegt, die Aktivierungs-E-Mail wird versendet und die Hinweisbox auf der Mein-Konto-Seite ist korrekt. Das Problem ist ausschließlich die Art der Antwort im AJAX-Kontext:

    Das Modal erwartet eine AJAX-kompatible Response für den Action-Handler nasa_process_register, der im Erfolgsfall u.a. folgende Schlüssel zurückliefert:

    • error: “0” (Erfolg)
    • mess: ‘Herzlichen Glückwunsch!Jetzt haben Sie sich erfolgreich registriert. Sie können diesen Tab jetzt schließen oder Ihr Dashboard besuchen.’
    • svg_check: ”
    • redirect: ‘https://www.website.de/’

    Diese Struktur wertet das Theme aus, zeigt die Erfolgsnachricht im Modal an und führt anschließend ggf. einen Redirect durch. Wenn Germanized aktiv ist, erhält das Modal stattdessen einen 302-Redirect samt kompletter HTML-Seite und kann den Vorgang daher nicht sauber als „erfolgreich“ erkennen – der Spinner im Modal bleibt hängen und es wirkt so, als würde nichts passieren, obwohl im Hintergrund alles korrekt angelegt wurde.

    Wichtige Beobachtungen:

    • Deaktiviere ich Germanized, funktioniert der AJAX-Registrierungsflow im Modal wie erwartet: Der Handler nasa_process_register liefert die oben genannte Struktur (error, mess, svg_check, redirect), das Modal zeigt den Erfolg an, schließt sich bzw. leitet weiter und der User bleibt im gewohnten Flow.
    • Aktiviere ich testweise das Parent Theme (Child Theme deaktiviert), bleibt das Problem bestehen.
    • Der Unterschied ist eindeutig Germanized (insbesondere Double-Opt-in / Account-Aktivierung), nicht das Theme.

    Mein Verständnis:
    Germanized erweitert den Registrierungs- / Account-Aktivierungsflow (Double-Opt-in) und führt unabhängig vom Kontext einen Redirect auf die Mein-Konto-Seite mit account=activate aus. Für normale Seitenaufrufe ist das sinnvoll, im AJAX-Kontext (admin-ajax.php) führt es aber zu Problemen, weil dort eine strukturierte AJAX-Antwort erwartet wird.

    Verbesserungsvorschlag (Minimalanforderung):

    Im AJAX-Kontext (wp_doing_ajax() === true) wäre es hilfreich, wenn Germanized:

    • keinen Redirect auf „Mein Konto / account=activate“ ausführt und
    • keine eigene Ausgabe/Response erzeugt, die das normale Ergebnis des Handlers nasa_process_register ersetzt.

    Stattdessen sollte im AJAX-Kontext der bestehende Handler (hier: nasa_process_register) seine eigene Antwort wie vorgesehen zurückgeben dürfen (inkl. error, mess, svg_check, redirect), damit das Theme den Erfolg korrekt erkennen, das Modal aktualisieren und ggf. schließen bzw. weiterleiten kann.

    Für klassische (nicht-AJAX) Registrierungsvorgänge kann das bestehende Redirect-/Notice-Verhalten unverändert bleiben. So bliebe die Double-Opt-in-/Aktivierungslogik voll erhalten, wäre aber zusätzlich mit gängigen AJAX-/Modal-Registrierungen kompatibel, wie sie viele WooCommerce-Themes verwenden.

    Mir ist wichtig zu betonen: Ich möchte Germanized nicht „abschalten“, sondern die bestehende Anpassung an WooCommerce so verbessern, dass der Double-Opt-in-Flow auch im AJAX-Kontext sauber funktioniert und die vorhandene Theme-Logik (nasa_process_register mit error/mess/svg_check/redirect) nicht gestört wird.

    Falls ihr dazu noch technische Details (z.B. konkrete Request-/Response-Dumps oder Infos zur verwendeten Modal-Implementierung) benötigt, liefere ich die gerne nach.

    Viele Grüße

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Contributor Dennis

    (@vdwoocommercesupport)

    Hi,

    ja, das hat u.a. damit zu tun, dass eine Erfolgsmeldung/Hinweis zum DOI gegeben werden soll und zwar selbst dann, wenn ein automatischer Login nicht erfolgt ist (bei automatischem Login nimmt der Woo Core selbst einen solchen Redirect vor). Ich setze das gern mal auf die Roadmap (wir haben generell einige Verbesserungen in Sachen DOI geplant).

    Grüße

    Thread Starter mdw77

    (@mdw77)

    Danke dir für die Rückmeldung und dass ihr das auf die Roadmap nehmt.
    Zur Ergänzung aus Sicht des Themes (Elessi / NASA):

    – Die Registrierung im Modal läuft über admin-ajax.php mit action=nasa_process_register.
    – Der Handler elessi_process_register() erzeugt selbst eine JSON-Antwort mit error, mess, svg_check (und redirect).
    – Das Theme-JavaScript wertet res.error === ‘0’ aus, zeigt res.svg_check + res.mess im Modal an und schließt das Modal nach 3 Sekunden automatisch. Ein Redirect (res.redirect) wird im JS aktuell nicht verwendet.
    – Problematisch ist nur, dass im AJAX-Kontext statt dieser JSON-Antwort ein 302-Redirect + HTML von Germanized zurückkommt – damit kann das Modal den Erfolg nicht erkennen und bleibt „hängend“, obwohl Konto und DOI-Mail korrekt erstellt/versendet wurden.

    Für meinen Fall würde es schon reichen, wenn im reinen AJAX-Kontext (wp_doing_ajax() === true) kein Redirect/HTML ausgegeben wird, sondern die vorhandene Antwort des Theme-Handlers durchlaufen darf. Die DOI-Hinweise über Mein Konto sind für normale (nicht-AJAX-)Registrierungen ja weiterhin sinnvoll und nötig.

    Plugin Contributor Dennis

    (@vdwoocommercesupport)

    Hi,

    ich habe mal einen Check dazu integriert, kannst du gern vorab mal testen: https://github.com/vendidero/woocommerce-germanized/blob/master/includes/class-wc-gzd-customer-helper.php

    Grüße

    Thread Starter mdw77

    (@mdw77)

    Hallo,

    vielen Dank für die schnelle Rückmeldung und den kurzfristigen Fix im WC_GZD_Customer_Helper. Ich habe die aktuelle GitHub‑Version bei mir im Live‑Setup getestet (Elessi‑Theme, Registrierung über das AJAX‑Modal mit action=nasa_process_register) und kann bestätigen:

    – Der 302‑Redirect auf ?account=activate tritt im AJAX‑Kontext nicht mehr auf.

    admin-ajax.php liefert jetzt einen sauberen 200‑Response mit JSON, sodass das Elessi‑Modal wie vorgesehen die Erfolgsnachricht anzeigen und den Spinner beenden kann.

    – Der Double‑Opt‑in‑Flow bleibt dabei erhalten,die Aktivierungs‑E-Mail wird verschickt und der Login ist weiterhin erst nach Bestätigung möglich.

    Für meinen Anwendungsfall funktioniert das also genau wie gewünscht.

    Vielen Dank nochmal für die schnelle Umsetzung und den unkomplizierten Support!

    Viele Grüße

    Plugin Contributor Dennis

    (@vdwoocommercesupport)

    Super, freut mich zu hören. Viel Erfolg weiterhin!

    PS: Wenn du mit Germanized und unserem Support zufrieden bist, würden wir uns über eine Bewertung freuen!

Viewing 5 replies - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.