if(!is_user_logged_in()) returnează true la eroarea 404

29 ian. 2014, 21:05:18
Vizualizări: 16.4K
Voturi: 1

Am un site restricționat doar pentru utilizatorii înregistrați.

Pentru a implementa această restricție, verific dacă utilizatorul este autentificat:

// nu permitem utilizatori neautentificați
if( !is_user_logged_in() ) {
    wp_redirect('/wp-login.php');
    //auth_redirect();
    exit;
}

Dar uneori eram deconectat fără motiv aparent și nu puteam înțelege unde să caut problema. Se întâmpla ocazional și era foarte greu de depanat.

Am descoperit acum că if( !is_user_logged_in() ) returnează true pe paginile de eroare 404.

Încă investighez problema, dar vreau să aud părerea voastră - este acest comportament normal sau intenționat? Puteți confirma dacă observați același lucru în instalările voastre? Folosesc ultima versiune de WordPress.


Actualizare:

Încă nu înțeleg complet, în footer.php:

if(!is_user_logged_in()) {
    echo '123';
}

afișează 123, dar funcția mea nu face redirect. Totuși, situația este ciudată și creează probleme cu un alt plugin din acest motiv.

Plugin-ul arată astfel:

add_action("wp_footer","bpln_store_ids");
function bpln_store_ids(){
    if(!is_user_logged_in())
        return;
 ?>
 <div id="bpln-notification-ids" style="display:none;">
 <?php echo join(",",bpln_get_all_notification_ids(bp_loggedin_user_id()));?>
 </div>
<?php
}

Deoarece verificarea returnează true, conținutul real nu va fi niciodată afișat.

7
Comentarii

Unde efectuezi verificarea? Poți face o redirecționare doar înainte ca orice HTML să fie afișat. Dacă inițiezi o redirecționare după ce trimiterea conținutului a început, aceasta va fi ignorată.

Seamus Leahy Seamus Leahy
29 ian. 2014 21:18:59

Folosesc asta în header, înainte de doctype. Dar problema apare în footer.php. Am actualizat întrebarea mea. Aceasta încă reprezintă o problemă. Poți confirma dacă se întâmplă la fel peste tot? Cred și eu că este un bug.

CBeTJlu4ok CBeTJlu4ok
29 ian. 2014 21:23:51

Nu am nicio problemă cu is_user_logged_in() care să raporteze greșit pe pagina 404 - nici măcar în footer. Poate ai un plugin care modifică starea utilizatorului curent. Trebuie să dezactivezi pluginurile și temele non-standard pentru a determina dacă problema vine de la unul dintre acestea. Dacă problema persistă și într-o instalare standard de WordPress, atunci este o problemă de WordPress, altfel este legată de un add-on.

Seamus Leahy Seamus Leahy
29 ian. 2014 21:42:24

Există un link pe care îl putem vizita pentru a-l vedea în acțiune?

eteich eteich
29 ian. 2014 21:44:22

Nu ar trebui să folosești redirect în fișierul header.php, de obicei este prea târziu, headerele sunt deja trimise. Așa că conectează-l mai devreme, de exemplu la hook-ul template_redirect.

birgire birgire
29 ian. 2014 21:56:20

@birgire Ca un răspuns separat, te rog.

kaiser kaiser
29 ian. 2014 22:12:05

@kaiser, mulțumesc pentru reamintire - știu, e un obicei prost să sugerezi răspunsul în comentarii ;-)

birgire birgire
30 ian. 2014 02:52:08
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 1
4

Încearcă acest cod pentru redirecționarea ta:

add_action( 'template_redirect', function(){

    // utilizatorii neautentificați nu sunt permisi
    if( ! is_user_logged_in() )
    {
        wp_redirect( home_url( '/wp-login.php' ), 302 );
        exit();
    }
});

pentru a permite doar utilizatorilor autentificați să vizualizeze site-ul tău.

În general, este prea târziu să folosești redirecționarea direct în fișierul header.php, așa că este mai bine să folosești un hook care se declanșează înainte ca headerele http să fie trimise, cum ar fi hook-ul template_redirect. De asemenea, este important ca template_redirect să nu fie activat pe pagina wp-login.php.

30 ian. 2014 02:50:54
Comentarii

Aici sunt voturile pozitive. Cât de ușor a fost asta? ;)

kaiser kaiser
30 ian. 2014 04:31:13

Nu voi marca acest răspuns ca fiind corect, deoarece întrebarea este diferită, dar este interesant și ar putea fi o altă problemă a mea, voi încerca asta

CBeTJlu4ok CBeTJlu4ok
1 feb. 2014 11:05:22

Am încercat, dar nu funcționează, când sunt deconectat, încă pot vizualiza site-ul. Poate template_redirect este o acțiune greșită?

CBeTJlu4ok CBeTJlu4ok
1 feb. 2014 11:08:48

Este ciudat, am testat cu succes pe o instalare simplă. Poate folosești un plugin/theme care interferează? Poate ai probleme cu cookie-urile, ai încercat într-un alt browser sau ai șters cache-ul? Poți încerca un alt hook mai devreme precum wp, dar dacă vrei să folosești hook-uri precum init trebuie să modifici codul de mai sus pentru a evita bucla infinită. Care este rezultatul lui home_url( '/wp-login.php' )? Ce se întâmplă dacă înlocuiești wp_redirect() cu die( 'Stop!' )? Ai adăugat fragmentul de cod în fișierul tău functions.php?

birgire birgire
1 feb. 2014 18:52:55