J'essaie de rediriger les utilisateurs en fonction des éléments suivants ...
Le rôle de l'utilisateur = membre et l'identifiant de la page est 6
//If Role = Customer & Page Is ID 6 Then Redirect To Checkout
if ( user_can( $current_user, "customer" ) && ! is_page( 6 ) )
{
wp_redirect(home_url().'/checkout');
exit;
}
elseif ( ! is_page ( 6 ) )
{
//If Not Logged in & Page Is Not ID 6 then redirect to login
auth_redirect();
}
elseif ( user_can( $current_user, "member" ) && is_page( 6 ) )
{
// User role = member and Page ID is 6 redirect to home page
wp_redirect(home_url());
exit;
}
?>
Ce qui, autant que je sache, devrait fonctionner, mais ce n'est pas le cas, cela me donne une page blanche. Le script est exécuté à partir de header.php et constitue la première chose dans le fichier PHP.
La première règle - Si Role = Client & Page est l'ID 6, puis Redirect to Checkout fonctionne correctement et ils sont redirigés vers la page de paiement.
La deuxième règle empêche quiconque de se connecter
La troisième règle fonctionne correctement
Est-ce que je fais quelque chose de mal?
MODIFIER
Vous utilisez auth_redirect();
. Par défaut, il vérifie si un utilisateur est connecté ou non. Vous n'avez donc pas besoin de vérifier à nouveau si un utilisateur est connecté. dans ou pas
Lorsque ce code est appelé à partir d'une page, il vérifie si l'utilisateur visualisant la page est connecté. Si l'utilisateur n'est pas connecté, il est redirigé vers la page de connexion. L'utilisateur est redirigé de manière à ce que, lors de la connexion, il soit directement envoyé à la page à laquelle il tentait d'accéder.
Alors tu peux juste faire
if ( ! is_page ( 6 ) ) {
auth_redirect();
}
EDIT 2
//If Role = Customer & Page Is ID 6 Then Redirect To Checkout
if ( user_can( $current_user, "customer" ) && ! is_page( 6 ) )
Il s’agit des deux premières lignes de votre code, vérifiez la première ligne et l’ID de page 6 et la deuxième ligne ! is_page( 6 )
. Repérer la différence?
Votre code à la ligne 2 indique si l'ID de la page N'EST PAS 6
EDIT 3
Le script est exécuté à partir de header.php et constitue la première chose dans le fichier PHP.
Que voulez-vous dire la première chose dans le fichier php. Cela va vous casser le site. Vous devrez déplacer ce code au moins dans la balise de corps d'ouverture (<body>
), où il devrait être
EDIt 4
Depuis que nous avons commencé, une petite chose a changé :-). Essayez de réorganiser votre séquence
//If Role = Customer & Page Is ID 6 Then Redirect To Checkout
if ( user_can( $current_user, "customer" ) && ! is_page( 6 ) ) {
wp_redirect(home_url().'/checkout');
exit;
}elseif ( user_can( $current_user, "member" ) && is_page( 6 ) {
// User role = member and Page ID is 6 redirect to home page
wp_redirect(home_url());
exit;
} elseif ( ! is_page ( 6 ) && !is_user_logged_in() ) {
//If Not Logged in & Page Is Not ID 6 then redirect to login
auth_redirect(); //Not sure if this will work.
}
?>
Ne faites pas cela dans votre header.php
et polluez vos modèles, utilisez le système que WordPress vous propose et accrochez-vous à l'action template_redirect
comme ceci:
add_action( 'template_redirect', 'wpse156774_redirect' );
function wpse156774_redirect() {
// your code and conditions here
}
Cela peut être mis dans votre functions.php
ou un plugin.