if(!is_user_logged_in()) returnează true la eroarea 404
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.
Î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.
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
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
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