Rediriger l'utilisateur vers l'URL d'origine après la connexion?

15

J'ai une fonction qui redirige les utilisateurs vers la page de connexion (home) s'ils essaient d'accéder à une autre page sans être connectés, voici comment cela fonctionne:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

Vraiment simple et fonctionne bien, le problème est que je dois les rediriger vers l'URL à laquelle ils essayaient de se rendre après s'être connecté avec succès, exactement comme le backend WordPress fonctionne.

Y a-t-il un moyen de faire cela? Merci d'avance!

    
posée Javier Villanueva 30.04.2011 - 05:35

7 réponses

4

Merci à tous, j'ai utilisé un peu de ce que tout le monde a recommandé afin que 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 sur mon formulaire de connexion (je suis en train de coder mon formulaire de connexion dans mon application, merci @Ashfame de m'avoir informé de wp_login_form, je ne savais pas qu'il existait). J'ai ajouté ceci lorsque les informations d'identification de l'utilisateur sont correctes et qu'elles sont prêtes à 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;
}

Merci beaucoup pour votre aide, j'ai voté pour tout le monde!

    
réponse donnée Javier Villanueva 30.04.2011 - 18:41
15

Vous pouvez le faire facilement. Il vous suffit de spécifier un paramètre de redirection. Si vous utilisez un lien de connexion sur la page d'accueil pour accéder à la page de connexion, la solution de @ sisir est correcte.

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

Si vous utilisez un formulaire personnalisé sur la page d'accueil, dans le <form> , assurez-vous de renseigner un champ masqué 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() pour générer le formulaire, renseignez un paramètre - enlace

<?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 autres paramètres en fonction de vos besoins ou de vos besoins.

    
réponse donnée Ashfame 30.04.2011 - 12:43
6

Essayez de passer the_permalink() en tant que $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:

Désolé, vous avez mal compris votre question à l’origine. 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 );

Notez aussi: l'utilisation correcte de wp_redirect() nécessite généralement l'ajout de exit; , que j'ai ajouté à mon deuxième exemple.

    
réponse donnée Chip Bennett 30.04.2011 - 05:42
2

c’est mon code que j’utilise avec des personnes pour accéder directement à la page de connexion wp. Puis, une fois connectés, ils sont retournés à leur lieu d'origine. Mais ce n’est pas la page d’accueil, mais la page de connexion wordpress sur laquelle j’ai configuré la connexion personnalisée.

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>

Vous pouvez faire des recherches avec. En règle générale, vous obtiendrez l'URL actuelle d'un utilisateur sous $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]

    
réponse donnée Sisir 30.04.2011 - 10:43
0

Le crochet de filtrage login_redirect est une solution plus complète et plus efficace ici. De cette façon, vous pouvez proposer différents chemins de redirection pour différents niveaux d’utilisateurs ou conserver l’URL de redirection en cas d’erreur lors de la connexion (mot de passe incorrect, par exemple).

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 );
    
réponse donnée Matt 12.08.2014 - 17:24
0

Cela n’a fonctionné dans aucune de vos réponses, mais n’a fait qu’ajouter une petite chose, cela a fonctionné! Voici mon 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 );

Seulement, j'ai ajouté /wp-login.php par rapport à la réponse de @ Matt, mais pour moi a été la clé. J'espère que cela pourra aider! :)

** EDIT:

J'ai détecté une erreur lorsque vous devez forcer wordpress à navegate dans HTTPS. Cette méthode ne fonctionne pas car la redirection est en HTTP. Pour résoudre le problème, j'ai changé la fonction. 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é le protocole, puis j'ai supprimé ' esc_url ' et ajouté le protocole correct: $protocol:// . J'ai aussi changé le "" .

Je suis basé sur cette page .

    
réponse donnée Neil 23.05.2017 - 14:40
0

Je sais que c’est très tard, mais j’ai publié un article expliquant comment le faire si de futures personnes le trouvaient et en avaient besoin:

enlace

    
réponse donnée user90810 17.03.2016 - 22:02

Lire d'autres questions sur les étiquettes