Rediriger l'utilisateur vers l'URL d'origine après la connexion?
7 réponses
- votes
-
- 2011-04-30
Merci àtous,j'aien quelque sorte utilisé unpeu ce quetout lemonde a recommandé,donc à lafin mon code ressemble à ceci:
function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Et surmonformulaire de connexion (je codifieen durmonformulaire de connexion dansmon applicationmerci @Ashfame dem'avoirinformé de wp_login_form,je n'avais aucuneidée de sonexistence),j'ai ajouté ceci lorsque lesinformations d'identification de l'utilisateur sont correcteset qu'ils sontprêts à se connecter:
if (isset($_REQUEST['redirect_to'])){ wp_redirect($_REQUEST['redirect_to']); // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit; exit; } else { wp_redirect(get_bloginfo('url') . '/groups/'); exit; }
Mercibeaucouppour votre aide,j'ai votépourtout lemonde!
Thanks all, I kind of used a bit of what everyone recommended so in the end my code looks like this:
function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
And on my login form (I'm hardcoding my login form in my aplication thanks @Ashfame for letting me know about wp_login_form I had no idea it existed) I added this when user credentials are fine and they're ready to login:
if (isset($_REQUEST['redirect_to'])){ wp_redirect($_REQUEST['redirect_to']); // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit; exit; } else { wp_redirect(get_bloginfo('url') . '/groups/'); exit; }
Thanks a lot for your help, I voted up everyone!
-
Salut Javier,dans quelfichier avez-vous ajouté cesfonctions?Merci.Hi Javier, in which file did you add these functions? Thanks.
- 0
- 2012-08-24
- Tyler Durden
-
Dans `functions.php`In `functions.php`
- 0
- 2012-08-25
- Javier Villanueva
-
Vous devriez appeler `exit ()` ou `die ()` après `wp_redirect ()`.Sinon,ilestpossible que le code après `wp_redirect ()` s'exécute,ce quipeutentraîner desbogueset desfailles de sécurité.You should call `exit()` or `die()` after `wp_redirect()`. Otherwise it's possible that code after `wp_redirect()` will execute, which can lead to bugs and security vulnerabilities.
- 4
- 2012-11-06
- Ian Dunn
-
- 2011-04-30
Vouspouvez lefairefacilement. Il vous suffit de spécifier unparamètre de redirection. Si vous utilisez un lien de connexion sur lapage d'accueilpour accéder à lapage de connexion,la solution de @ sisirest correcte.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>
Si vous utilisez unformulairepersonnalisé sur lapage d'accueil,puis dans le
<form>
,assurez-vous de remplir un champmasqué avec l'URL à rediriger<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />
Et si vous utilisez
wp_login_form()
pourgénérer leformulaire,remplissez unparamètre - http ://codex.wordpress.org/Function_Reference/wp_login_form<?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => true, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args ); ?>
Modifiez les autresparamètres selon ce dont vous avez ou avezbesoin.
You can do that easily. You just need to specify a redirection parameter. If you are using a login link on the homepage to go to the login page, then @sisir's solution is correct.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>
If you are using a custom form on the frontpage, then inside the
<form>
, make sure you fill in a hidden field with the url to redirect<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />
And if you are using
wp_login_form()
to generate the form, then fill in a parameter - http://codex.wordpress.org/Function_Reference/wp_login_form<?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => true, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args ); ?>
Change other parameters as per what you have or need.
-
J'utilise unformulairepersonnaliséet j'utilise votre solution de champ cachéfournie,mais dansmon cas,je suis redirigé vers une URL comme celle-ci "localhost/wordpress/localhost/wordpress/blog/quelqu'un".de l'aide?i am using custom form, and i am using your provided hidden field solution, but in my case i am being redirected to url like this 'localhost/wordpress/localhost/wordpress/blog/someone'. any help?
- 0
- 2014-02-06
- rafi
-
J'ai ceci,j'utilise la doublebarre oblique.doncma solutionest comme cecii have got this, i am using double slash. so my solution is like this
- 0
- 2014-02-06
- rafi
-
- 2011-04-30
Essayez depasser
the_permalink()
comme argument$redirect
:function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( the_permalink() ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
MODIFIER:
Désolé,vous avezmal compris votre question au départ.Essayez ceci:
function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Remarquez aussi: l'utilisation correcte de
wp_redirect()
nécessitegénéralement d'ajouterexit;
,quej'ai ajouté àmon deuxièmeexemple.Try passing
the_permalink()
as the$redirect
argument:function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( the_permalink() ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
EDIT:
Sorry, misunderstood your question originally. Try this:
function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Note also: proper usage of
wp_redirect()
generally requires addingexit;
, which I have added to my second example.-
Celan'a aucun sens,la redirection doit aller à lamaison,celafonctionnebien.J'aibesoin d'unmoyen d'attraper l'url d'origineet de rediriger l'utilisateur unefois qu'il s'est connecté.That doesn't make any sense, the redirect needs to go to home, that's working fine I need some way to catch the original url and redirect the user there once he logs in.
- 0
- 2011-04-30
- Javier Villanueva
-
Désolé,vous avezmal compris votre question au départ.J'ai ajouté unemodification qui,espérons-le,répond à votre cas d'utilisation.Sorry, misunderstood your question originally. I've added an edit that hopefully addresses your use case.
- 0
- 2011-04-30
- Chip Bennett
-
- 2011-04-30
c'estmon code quej'utilisepour diriger lesgens vers lapage de connexion wp.Puis,unefois connectés,ils sont retournés là oùils étaient.Mais cen'estpas lapage d'accueilmais lapage de connexion wordpress oùje configure une connexionpersonnalisée.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>
Vous voudrezpeut-êtrefaire des recherches avec.En règlegénérale,vous obtiendrez l'URL actuelle d'un utilisateurpar
$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
this is my code that i use people to direct to wp login page. Then when logged in they returned back to where they were. But it is not home page but the wordpress login page where i setup custom login.
<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>
You might wanna research with. Typically you will get the current url of a user by
$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]
-
- 2014-08-12
Le
login_redirect
hook hook est un hook defiltrageplus completetsolutionefficaceici.De cettefaçon,vouspouvezproposer différents chemins de redirectionpour différentsniveaux d'utilisateurs,ou conserver l'URL de redirectionen cas d'erreur lors de la connexion (c'est-à-dire unmot depasseincorrect).function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
The
login_redirect
filter hook is a more complete and effective solution here. This way, you can offer different redirect paths for different levels of users, or maintain the redirect URL in the case of an error when logging in (i.e. Incorrect Password).function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
-
- 2014-08-22
Celan'afonctionné aucune de vos réponses,maisen ajoutant seulement unpetit truc,cela afonctionné! Voicimon code:
function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"])); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Seulementj'ai ajouté
/wp-login.php
par rapport à la réponse de @ Matt,maispourmoi,cela a été la clé. J'espère que çat'as aidé! :)** MODIFIER:
J'ai détecté une ERREUR lorsque vousforcez wordpress ànavegateen HTTPS. Cetteméthodene fonctionnepas car la redirectionesten HTTP. Pour résoudre leproblème,j'ai changé lafonction. Voici le résultat:
function restrict_access_if_logged_out(){ global $wp; $protocol='http'; if (isset($_SERVER['HTTPS'])) if (strtoupper($_SERVER['HTTPS'])=='ON') $protocol='https'; if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){ $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
J'ai vérifié leprotocole,puisj'ai supprimé '
esc_url
'et ajouté lebonprotocole:$protocol://
. J'ai également changé le""
.Je suisbasé sur cettepage .
It has not worked any of your answers but only adding a little thing, it worked! Here my code:
function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"])); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
Only I added
/wp-login.php
in comparison to @Matt's response, but for me has been the key. Hope that helps! :)**EDIT:
I detected an ERROR when you are FORCE wordpress to navegate in HTTPS. This method doesn't work because the redirection is in HTTP. For fix the problem I changed the function. This is the result:
function restrict_access_if_logged_out(){ global $wp; $protocol='http'; if (isset($_SERVER['HTTPS'])) if (strtoupper($_SERVER['HTTPS'])=='ON') $protocol='https'; if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){ $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 );
I check the protocol and then I deleted '
esc_url
' and added the correct protocol:$protocol://
. Also I changed the""
.I'm based with this page.
-
- 2016-03-17
Je sais que c'esttrèstard,maisj'aipublié un articleexpliquantexactement commentfaire cela si despersonnesfuturestrouvent celaet en ontbesoin:
http://www.ryanprejean.com/force-login-avec-redirection-et-exceptions/
I know this is super late, but I made a post about exactly how to do this if any future people find this and need it:
http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/
-
Bien que ce lienpuisse répondre à la question,ilestpréférable d'inclure lespartiesessentielles de la réponseiciet defournir le lienpour référence.Les réponses aux liens uniquementpeuvent devenirinvalides si lapage liée change.Voir la réponse].While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. See [answer].
- 0
- 2016-03-17
- Gabriel
-
Le lienest rompu (avril 2020).Link is broken (April 2020).
- 0
- 2020-04-22
- Philip Jones
J'ai unefonction qui redirige les utilisateurs vers lapage de connexion (accueil) s'ilsessaient d'accéder à une autrepage sans être connectés,voici comment celafonctionne:
Vraiment simpleet fonctionnebien,leproblèmeest queje dois les rediriger vers l'URL vers laquelleilsessayaient d'accéder après s'être connectés avec succès,exactement comme lebackend WordPressfonctionne.
Y a-t-il unmoyen defaire cela?Merci d'avance!