Weiterleitung nach Login auf vorherige Seite

  • Hallo zusammen,

    ich habe ein Anliegen bezüglich der Anmeldung in Wordpress.

    Ich würde gerne die Benutzer nach Aufruf von /wp-login.php wieder zur vorherigen Seite zurückschicken.

    Das können bei uns entweder Beiträge mit der Permalink-Struktur /kategorie/beitragname oder aber bestimmte Seiten, wie z.B. /seitenname sein.

    Da wir unsere Authentifizierung per SSO an Microsoft weiterleiten, ist es uns leider nicht möglich per Parameter eine entsprechende Weiterleitung an wp-login.php mitzugeben. Diese werden von der Microsoft URL Umleitung zum SSO leider abgeschnitten.

    Meine Idee war jetzt, dass ich beim Aufruf einer Seite, diese Seite in einer Session Variable von PHP speichere und dann hinterher per Login Redirect Filter auf diese Seite umleite.

    Leider ist die Session Variable aber immer leer, sodass der Nutzer doch immer auf der Standard-Umleitungsseite landet.

    Haben Sie eine Idee, wieso das nicht funktioniert? Ist vielleicht irgendwie blockiert, dass wir die Daten abfragen können oder die dann in einer Session Variable speichern?

    Ich hatte auch mal versucht mir die Daten in ein Cookie zu speichern, allerdings bekomme ich dann Fehler von Wordpress beim Aufrufen von Seiten, vermutlich weil ich einen Cookie mit Null initialisieren will.

    Die entsprechenden Methoden habe ich in der functions.php im Child-Theme hinterlegt und hier angehängt:


    > // Save the users' site before sending them to the login page

    > function capture_before_login_page_url(){

    >

    > if( !is_user_logged_in() ){

    > session_start();

    > $current_url = home_url(add_query_arg(array(), $wp->request));

    > $_SESSION['referer_url'] = $current_url;

    > }

    >

    > }

    > add_action( 'wp', 'capture_before_login_page_url' );

    >

    > /**

    > * Redirect users after login

    > */

    > function login_redirect( $url ) {

    > session_start();

    >

    > $redirect_url = home_url( '/goethe-portal' );

    > if ( isset($_SESSION['referer_url']) ){

    > $redirect_url = $_SESSION['referer_url'];

    > unset( $_SESSION['referer_url'] );

    > }

    >

    > return $redirect_url;

    > }

    > add_filter( 'login_redirect', 'login_redirect', 9999, 3 );


    Wir verwenden aktuell PHP 8.0 und die aktuellste Wordpress Version.

    Vielen Dank!


    VG
    Simon F.

    • 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

  • Ich vermute, dass sessian_start() zu spät kommt. Das ganze passiert bei dir ja erst wenn der Benutzer schon eingeloggt ist. Aber du willst ja die URL bevor er das ist.

    Edit: sorry, ist noch zu früh. Da ist ja ein ! in der Abfrage. Vergiss was ich geschrieben habe.
    PS: Versuch Mal deine Code als PHP hier einzubauen

    PHP
    php_info();

    4 Mal editiert, zuletzt von vriic (4. Dezember 2021 um 06:51)

  • Aber ich habe gerade gelesen, dass die globale Session Variablen bei wp deaktiviert sind. Das soll man mit

    PHP
    function register_my_session(){
        if( ! session_id() ) {
            session_start();
        }
    }
    
    
    add_action('init', 'register_my_session');

    aktivieren können. Danach sollte dein Code funktionieren. Dann brauchst du in deiner Funktion auch das session_start() nicht mehr. Mehr dazu hier gefunden

    3 Mal editiert, zuletzt von vriic (4. Dezember 2021 um 10:49)

  • Aber ich habe gerade gelesen, dass die globale Session Variablen bei wp deaktiviert sind.


    Wo genau hast Du das gelesen?

    Probleme entstehen eher z.B. bei Nutzung von Cache Plugins oder unsauberer Einrichtung/Nutzung von Links mit Mischungen von http und https oder "mit und ohne www" usw. oder bei zu spätem Aufruf von session_start() wenn schon anderweitige Ausgaben erfolgt sind.

    Code
    $current_url = home_url(add_query_arg(array(), $wp->request));


    Was genau soll diese Zeile bewirken? Warum ist das [FONT=Courier New]array()[/FONT] leer? Woher kommt die Varianle [FONT=Courier New]$wp[/FONT]? Siehe auch Dokumentation [FONT=Courier New]add_query_arg()[/FONT]

    3 Mal editiert, zuletzt von b3317133 (4. Dezember 2021 um 12:58)

  • Wo genau hast Du das gelesen?

    Was genau soll diese Zeile bewirken? Warum ist das [FONT=Courier New]array()[/FONT] leer? Woher kommt die Varianle [FONT=Courier New]$wp[/FONT]? Siehe auch Dokumentation [FONT=Courier New]add_query_arg()[/FONT]

    Die sollte die aktuelle URL, auf der sich der User gerade befindet auslesen und dann soll dieser nach dem Login dahin zurückgeschickt werden.

    Könnte aber so funktionieren, oder?

    PHP
    <?php $_SERVER['REQUEST_URI'] ?>

    Aber ich habe gerade gelesen, dass die globale Session Variablen bei wp deaktiviert sind. Das soll man mit

    PHP
    function register_my_session(){
        if( ! session_id() ) {
            session_start();
        }
    }
    
    
    add_action('init', 'register_my_session');

    aktivieren können. Danach sollte dein Code funktionieren. Dann brauchst du in deiner Funktion auch das session_start() nicht mehr. Mehr dazu hier gefunden

    Das habe ich ausprobiert, klappt leider immer noch nicht.

  • Die sollte die aktuelle URL, auf der sich der User gerade befindet auslesen und dann soll dieser nach dem Login dahin zurückgeschickt werden.


    Warum ist das [FONT=Courier New]array()[/FONT] leer? Woher kommt die Variable [FONT=Courier New]$wp[/FONT]? Woher stammt dieser Code ursprünglich? Evtl. wurde beim Kopieren was missverstanden bzw. vergessen. So wie gepostet macht der Code keinen Sinn und verursacht PHP Warnungen.

    Könnte aber so funktionieren, oder?

    PHP
    <?php $_SERVER['REQUEST_URI'] ?>


    Diese Zeile alleine wird einen PHP Fehler erzeugen, die Variable als solche könnte das gewünschte Ergebnis enthalten, aber auch die Kommentare dazu in der PHP Dokumentation beachten.

Jetzt mitmachen!

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