Merci pour la lecture! Il y a beaucoup de redirection sur le site que je crée.
Par exemple,
s'il n'est pas connecté, accédez à une page "privée", il sera redirigé vers une page de connexion personnalisée.
si l'utilisateur se connecte, il sera redirigé vers la dernière page visitée avant d'accéder au formulaire de connexion.
Appelons les pages "Profile" et "LogIn".
Donc, si tout va bien devrait être:
-> non connecté essayer d'accéder profil -> redirection vers LogIn - > si OK redirige vers Profil
Cependant, lorsque LogIn appelle wp_get_referer (), il ne renvoie PAS Profile . Au lieu de cela il va "2 pages" en arrière.
Est-ce que "wp_get_referer ()" n'est pas Profile comme référent car agit comme une redirection. Tout comme le bouton "Retour" dans le navigateur le ferait.
Si vous accédez à la connexion via une page "publique" (en cliquant sur le lien), la redirection après la connexion fonctionne correctement.
page-profile.php
if( !is_user_logged_in() ) {
wp_redirect( get_permalink(37) ); //id 37 = page-login.php
exit;
}
page-login.php
//Set referer
$referer = wp_get_referer();
if( !$referer || referer_is_login_page($referer) )
$referer = get_bloginfo('url');
simpleSessionSet('login_referer', $referer);
...
//Log the user in
...
if ( is_wp_error($user_id) )
$errores = TRUE;
else
wp_redirect( simpleSessionGet('login_referer', '') );
Grâce à @Tom J Nowell, j'ai trouvé cela, qui garde l'essence du code et laisse l'URL beaucoup plus propre, mais dans la majorité des cas, $ _GET n'est pas nécessaire
page-profile.php
if( !is_user_logged_in() ) {
$redirect = url_add_parameter( get_permalink(37), 'redirect_to='.get_permalink() ); // Adds a parameter to the URL checks if '&' or '?' are being used already
wp_redirect( $redirect );
exit;
}
page-login.php
// Set referer
if( $_GET['redirect_to'] )
$referer = $_GET['redirect_to']; //When the referer page was a redirection
else
$referer = wp_get_referer();
if( !$referer || referer_is_login_page($referer) )
$referer = get_bloginfo('url');
simpleSessionSet('login_referer', $referer);
...
//Log the user in
...
if ( is_wp_error($user_id) )
$error = TRUE;
else
wp_redirect( simpleSessionGet('login_referer', '') );
Ne vous embêtez pas avec le simpleSessionGet, faites plutôt ce que WordPress lui-même fait et utilisez un paramètre get
par exemple.
$current_url = $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
wp_redirect( get_permalink(37).'?redirect_to='.$current_url);
Ensuite, dans votre redirection, effectuez quelque chose de similaire à:
wp_redirect( $_GET['redirect_to'] );