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!
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();
}
Ajouter une autre condition:
if( ! is_user_logged_in() and ! is_home() ) {
# redirect …
}