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.
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');
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.
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.
Deux remarques concernant la référence de la fonction WP pour wp_redirect()
...
exit;
fait en effet partie de l'utilisation, et$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