if(!is_user_logged_in()) restituisce true nella pagina 404
Sto gestendo un sito web chiuso accessibile solo agli utenti registrati.
Per fare questo, verifico se l'utente è loggato
// non sono ammessi utenti non autenticati
if( !is_user_logged_in() ) {
wp_redirect('/wp-login.php');
//auth_redirect();
exit;
}
Ma a volte il sistema mi disconnetteva e non riuscivo a capire dove cercare il problema. Si verificava occasionalmente ed era molto difficile da debuggare.
Ora: con una funzione diversa ho scoperto che if( !is_user_logged_in() )
restituisce true nella pagina 404.
Sto ancora facendo debug ma vorrei sentire la tua opinione, è normale o previsto? Potresti confermare se succede lo stesso nella tua installazione? Sto usando l'ultima versione di WordPress
Aggiornamento:
Ancora non capisco, in footer.php
if(!is_user_logged_in()) {
echo '123';
}
stampa 123 ma la mia funzione non redirige.. comunque è strano e crea problemi con un altro plugin per questo motivo.
Il plugin è così:
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
}
Poiché il controllo restituisce true, il contenuto effettivo non verrà mai visualizzato

Prova questo per il tuo reindirizzamento:
add_action( 'template_redirect', function(){
// gli utenti non autenticati non sono ammessi
if( ! is_user_logged_in() )
{
wp_redirect( home_url( '/wp-login.php' ), 302 );
exit();
}
});
per consentire solo agli utenti loggati di visualizzare il tuo sito.
Di solito è troppo tardi per usare il reindirizzamento direttamente nel file header.php
, quindi è meglio usare un hook che viene attivato prima che vengano inviati gli header HTTP, come l'hook template_redirect
. È anche importante che template_redirect
non sia attivato nella pagina wp-login.php
.

Non lo segnerò come risposta corretta, poiché la domanda è diversa, ma questo è interessante e potrebbe essere un altro mio problema, lo proverò

Ok, provato ma non funziona, quando sono disconnesso posso ancora vedere il sito. forse template_redirect è un'azione sbagliata?

È strano, l'ho testato con successo su un'installazione pulita. Forse stai usando un plugin/tema che interferisce? Potresti avere problemi con i cookie, hai provato con un altro browser o a svuotare la cache? Puoi provare un hook precedente come wp
, ma se vuoi usare hook come init
devi modificare il codice sopra per evitare un loop infinito. Qual è l'output di home_url( '/wp-login.php' )
? Cosa succede se sostituisci wp_redirect()
con die( 'Stop!' )
? Hai aggiunto lo snippet di codice nel tuo file functions.php
?
