web-dev-qa-db-fra.com

Comment rediriger toutes les demandes vers wp-login.php?

J'ai créé des pages de modèles de connexion/enregistrement personnalisées et je souhaite maintenant que chaque demande adressée à wp-login.php soit redirigée vers une URL personnalisée. Maintenant, j'ai quelque chose comme ça:

add_action('init','possibly_redirect');
 function possibly_redirect(){
global $pagenow;
if( '/wp-login.php' == $pagenow ) {
wp_redirect('/login');
exit();
}
}

mais cela ne fonctionne pas correctement car lorsque je clique sur un lien de déconnexion (dans un widget méta), il me redirigera vers le lien/login et ne se déconnectera pas. Avez-vous une autre méthode pour le faire en toute sécurité ou mieux? Je vous remercie.

2
John Smith

Pour restreindre l'accès direct uniquement à 'wp-login.php', sans POST ou demande GET (utile pour les formulaires de connexion ajax personnalisés), j'utilise la fonction avancée:

function possibly_redirect(){
  global $pagenow;
  if( 'wp-login.php' == $pagenow ) {
    if ( isset( $_POST['wp-submit'] ) ||   // in case of LOGIN
      ( isset($_GET['action']) && $_GET['action']=='logout') ||   // in case of LOGOUT
      ( isset($_GET['checkemail']) && $_GET['checkemail']=='confirm') ||   // in case of LOST PASSWORD
      ( isset($_GET['checkemail']) && $_GET['checkemail']=='registered') ) return;    // in case of REGISTER
    else wp_redirect( home_url() ); // or wp_redirect(home_url('/login'));
    exit();
  }
}
add_action('init','possibly_redirect');
6
Anatoly

En fait, j'ai trouvé le bon moyen de le faire.

Pour rediriger wordpress, connectez-vous à une URL personnalisée:

function redirect_login()
{
wp_redirect( home_url( '/login' ) );
exit(); 
}
add_action( 'login_form_login', 'redirect_login' );

Pour l’enregistrement WordPress de redirection vers une URL personnalisée:

 function redirect_register()
{
wp_redirect( home_url( '/registration' ) );
exit(); 
}
add_action( 'login_form_register', 'redirect_register' );

Je pense que le code est très simple à comprendre. En gros, vous ajoutez des points d'ancrage pour vous connecter et enregistrez l'URL, puis vous utilisez wp-redirect pour rediriger vers une URL personnalisée. Toutes les demandes à wp-login.php et wp-login.php? Action = register seront redirigées vers l'URL personnalisée que vous avez définie.

3
John Smith

Je recommanderais la réponse de John, en omettant exit(). Ainsi, le code qui est entièrement fonctionnel dans mon cas est le suivant:

function redirect_login() {
    wp_redirect( home_url( '/login' ) ); 
}
add_action( 'login_form_login', 'redirect_login' );

Il semble que la exit() empêche un utilisateur de se connecter.

1
Milan

Deux remarques concernant la référence de la fonction WP pour wp_redirect()...

  1. un exit; fait en effet partie de l'utilisation, et
  2. Le paramètre $location doit être "l'URI absolu", un paramètre incluant le protocole (http://). Exemple d'URI absolu/complet: http://www.example.com/blog/images/icecream.jpg
0
D. Abel