web-dev-qa-db-fra.com

is_user_logged_in ne fonctionne pas pour les utilisateurs déconnectés

J'ai donc le code ci-dessous dans mon fichier functions.php. Cela fonctionne pour les utilisateurs déconnectés, mais il redirige également les utilisateurs connectés. Quelqu'un peut-il aider?

add_action( 'template_redirect', 'redirect_to_specific_page' );
function redirect_to_specific_page() {
    if ( is_paged() || is_author() || is_single()  && ! is_user_logged_in() ) {
        wp_redirect( 'http://www.exampleblog.net/members-only/', 301 );
        exit;
    }
}

J'utilise ceci pour rediriger tous les utilisateurs déconnectés vers une page où il est indiqué qu'ils doivent être connectés pour afficher les autres pages (pages 2, 3, etc.). le nom de l'auteur).

1
ineedhelp

Vous devez encapsuler les trois premières conditions || entre parenthèses afin qu'elles soient évaluées en premierAVANTla dernière condition &&:

Exemple Psuedocode:

    here                               here 
     ↓                                  ↓  
if ( (condition || condtion || condition) && ! condition ) {
    //do business logic...
}

Cela signifie maintenant que:

Si unUNde is_paged()OUis_author()OUis_single()ESTtrueALORSévaluez la deuxième condition ! is_user_logged_in()

Dans votre code d'origine:

Sans parenthèses supplémentaires englobant les trois premières conditions,SIune de ces quatre conditions renvoie true, vous redirigez alors votre utilisateur, qu'il soit connecté ou non.

Code final avec parenthèses supplémentaires:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {   
    if ( (is_paged() || is_author() || is_single()) && ! is_user_logged_in() ) {
        wp_redirect( 'http://www.exampleblog.net/members-only/', 301 ); exit; 
    } 
}
4
userabuser