web-dev-qa-db-fra.com

Si l'utilisateur n'est PAS connecté et que l'ID de page n'est pas 6 - Rediriger vers la connexion

J'essaie de rediriger les utilisateurs en fonction des éléments suivants ...

  • Si Role = Client & Page n'est pas l'ID 6, puis rediriger vers la caisse
  • Si non connecté et que la page n'est pas l'ID 6, redirigez-vous pour vous connecter.
  • 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?

1
fightstarr20

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. 
}
?>
1
Pieter Goosen

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.

0
Nicolai