{"id":18939731,"date":"2026-06-16T10:57:49","date_gmt":"2026-06-16T10:57:49","guid":{"rendered":"https:\/\/wordpress.org\/support\/topic\/302-redirect-bei-ajax-registrierung-im-modal-admin-ajax-php-mit-double-opt-in\/"},"modified":"2026-06-16T10:57:49","modified_gmt":"2026-06-16T10:57:49","slug":"302-redirect-bei-ajax-registrierung-im-modal-admin-ajax-php-mit-double-opt-in","status":"publish","type":"topic","link":"https:\/\/wordpress.org\/support\/topic\/302-redirect-bei-ajax-registrierung-im-modal-admin-ajax-php-mit-double-opt-in\/","title":{"rendered":"302-Redirect bei AJAX-Registrierung im Modal (admin-ajax.php) mit Double-Opt-in"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hallo zusammen,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ich habe einen reproduzierbaren Konflikt zwischen WooCommerce Germanized und einer AJAX-basierten Registrierung im Modal (Theme: Elessi \/ NASA).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald Germanized aktiv ist und der Kunde sich \u00fcber das Registrierungsformular im Modal anmeldet, passiert Folgendes:<\/p>\n\n\n\n<ol>\n<li>Das Formular im Modal schickt einen AJAX-Request an:<br \/>POST \/wp-admin\/admin-ajax.php<\/li>\n\n\n\n<li>Statt einer AJAX-kompatiblen Antwort kommt:<br \/>HTTP 302 Redirect<br \/>Location: \/mein-konto\/?show_checkout_notice=yes&amp;account=activate<\/li>\n\n\n\n<li>Anschlie\u00dfend wird per GET die Mein-Konto-Seite geladen (HTML), auf der u.a. folgende Notices erscheinen:<\/li>\n<\/ol>\n\n\n\n<ul>\n<li>\u201eBitte aktiviere dein Kundenkonto indem du auf den Link in der E-Mail klickst.\u201c<\/li>\n\n\n\n<li>\u201eKeine Aktivierungs-E-Mail erhalten? Erneut zusenden\u201c mit Link:<br \/>?action=wc-gzd-resend-activation&amp;_wpnonce=\u2026<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">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\u00dflich die Art der Antwort im AJAX-Kontext:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Modal erwartet eine AJAX-kompatible Response f\u00fcr den Action-Handler <code>nasa_process_register<\/code>, der im Erfolgsfall u.a. folgende Schl\u00fcssel zur\u00fcckliefert:<\/p>\n\n\n\n<ul>\n<li>error: &#8220;0&#8221; (Erfolg)<\/li>\n\n\n\n<li>mess: &#8216;Herzlichen Gl\u00fcckwunsch!Jetzt haben Sie sich erfolgreich registriert. Sie k\u00f6nnen diesen Tab jetzt schlie\u00dfen oder Ihr Dashboard besuchen.&#8217;<\/li>\n\n\n\n<li>svg_check: &#8221;<\/li>\n\n\n\n<li>redirect: &#8216;https:\/\/www.website.de\/&#8217;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Struktur wertet das Theme aus, zeigt die Erfolgsnachricht im Modal an und f\u00fchrt anschlie\u00dfend ggf. einen Redirect durch. Wenn Germanized aktiv ist, erh\u00e4lt das Modal stattdessen einen 302-Redirect samt kompletter HTML-Seite und kann den Vorgang daher nicht sauber als \u201eerfolgreich\u201c erkennen \u2013 der Spinner im Modal bleibt h\u00e4ngen und es wirkt so, als w\u00fcrde nichts passieren, obwohl im Hintergrund alles korrekt angelegt wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wichtige Beobachtungen:<\/p>\n\n\n\n<ul>\n<li>Deaktiviere ich Germanized, funktioniert der AJAX-Registrierungsflow im Modal wie erwartet: Der Handler <code>nasa_process_register<\/code> liefert die oben genannte Struktur (error, mess, svg_check, redirect), das Modal zeigt den Erfolg an, schlie\u00dft sich bzw. leitet weiter und der User bleibt im gewohnten Flow.<\/li>\n\n\n\n<li>Aktiviere ich testweise das Parent Theme (Child Theme deaktiviert), bleibt das Problem bestehen.<\/li>\n\n\n\n<li>Der Unterschied ist eindeutig Germanized (insbesondere Double-Opt-in \/ Account-Aktivierung), nicht das Theme.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Mein Verst\u00e4ndnis:<br \/>Germanized erweitert den Registrierungs- \/ Account-Aktivierungsflow (Double-Opt-in) und f\u00fchrt unabh\u00e4ngig vom Kontext einen Redirect auf die Mein-Konto-Seite mit account=activate aus. F\u00fcr normale Seitenaufrufe ist das sinnvoll, im AJAX-Kontext (admin-ajax.php) f\u00fchrt es aber zu Problemen, weil dort eine strukturierte AJAX-Antwort erwartet wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Verbesserungsvorschlag (Minimalanforderung):<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im AJAX-Kontext (<code>wp_doing_ajax() === true<\/code>) w\u00e4re es hilfreich, wenn Germanized:<\/p>\n\n\n\n<ul>\n<li>keinen Redirect auf \u201eMein Konto \/ account=activate\u201c ausf\u00fchrt und<\/li>\n\n\n\n<li>keine eigene Ausgabe\/Response erzeugt, die das normale Ergebnis des Handlers <code>nasa_process_register<\/code> ersetzt.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Stattdessen sollte im AJAX-Kontext der bestehende Handler (hier: <code>nasa_process_register<\/code>) seine eigene Antwort wie vorgesehen zur\u00fcckgeben d\u00fcrfen (inkl. error, mess, svg_check, redirect), damit das Theme den Erfolg korrekt erkennen, das Modal aktualisieren und ggf. schlie\u00dfen bzw. weiterleiten kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr klassische (nicht-AJAX) Registrierungsvorg\u00e4nge kann das bestehende Redirect-\/Notice-Verhalten unver\u00e4ndert bleiben. So bliebe die Double-Opt-in-\/Aktivierungslogik voll erhalten, w\u00e4re aber zus\u00e4tzlich mit g\u00e4ngigen AJAX-\/Modal-Registrierungen kompatibel, wie sie viele WooCommerce-Themes verwenden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mir ist wichtig zu betonen: Ich m\u00f6chte Germanized nicht \u201eabschalten\u201c, 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 (<code>nasa_process_register<\/code> mit error\/mess\/svg_check\/redirect) nicht gest\u00f6rt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Falls ihr dazu noch technische Details (z.B. konkrete Request-\/Response-Dumps oder Infos zur verwendeten Modal-Implementierung) ben\u00f6tigt, liefere ich die gerne nach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele Gr\u00fc\u00dfe<\/p>\n","protected":false},"template":"","class_list":["post-18939731","topic","type-topic","status-publish","hentry","topic-tag-ajax","topic-tag-double-opt-in","topic-tag-redirect","topic-tag-registration"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/18939731","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic"}],"about":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/types\/topic"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/topic\/18939731\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/support\/wp-json\/wp\/v2\/media?parent=18939731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}