web-dev-qa-db-fra.com

Se connecter à la page d'accueil

J'ai un formulaire de connexion personnalisé qui fonctionne correctement dans ma vue d'accueil. Agréable. Mais ce que je veux, c’est que lorsque l’utilisateur essaie de visualiser une page, soit redirigé vers ma vue d’accueil au lieu de wp-login. J'essaie de faire comme ça:

add_action('template_redirect', 'redirect_to_login');

function redirect_to_login(){
 if(!is_user_logged_in()){
   wp_redirect(home_url()); exit;
 }
}

Ça ne fonctionne pas. Le navigateur dit qu'il a trop de redirections. Que puis-je faire?

Merci!

1
Lucas Veiga

template_redirect est appelé à chaque chargement de page, y compris la page d'accueil, de sorte que votre code redirige l'utilisateur vers la page d'accueil, même lorsqu'il visite la page d'accueil.

Vous pouvez ajouter une autre condition ici, is_home() ou is_front_page(), en fonction du paramètre défini dans admin, mais je recommande une approche plus longue pour une meilleure compatibilité.

a) Accédez à login_url pour modifier l’URL de connexion. Cela indique à wordpress que le formulaire de connexion est présent sur la page d'accueil et que wp-login.php ne doit pas être utilisé

add_filter('login_url', 'change_login_url');
function change_login_url() {
    return home_url('/');
}

b) Utilisez auth_redirect() pour vous assurer que l'utilisateur est redirigé vers la page précédente
c) Utilisez wp hook et non init car la conditionnelle is_front_page () ne fonctionnera pas car $ wp_query global n’a pas encore été défini.

add_action('wp', 'force_user_login');
function force_user_login() {
    if(!is_user_logged_in())
        auth_redirect();
}
4
Mridul Aggarwal

Ajouter une autre condition:

if( ! is_user_logged_in() and ! is_home() ) {
    # redirect …
}
1
fuxia