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

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

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
?
