if(!is_user_logged_in()) devuelve verdadero en páginas 404 - Solución WordPress
Estoy ejecutando un sitio web cerrado solo para usuarios registrados.
Para hacer esto, verifico si el usuario está conectado
// no se permiten usuarios no autenticados
if( !is_user_logged_in() ) {
wp_redirect('/wp-login.php');
//auth_redirect();
exit;
}
Pero a veces simplemente me desconecta, y no podía entender dónde buscar el problema. Ocurría ocasionalmente y era muy difícil de depurar.
Ahora: con una función diferente descubrí que if( !is_user_logged_in() )
devuelve true en páginas 404.
Todavía estoy depurando pero quiero escuchar su opinión, ¿esto es normal o intencional? ¿Podrías confirmar si esto es igual en tu instalación? Estoy ejecutando la última versión de WordPress
Actualización:
Todavía no puedo entender, en footer.php
if(!is_user_logged_in()) {
echo '123';
}
muestra 123 pero mi función no redirige.. pero sigue siendo extraño y tengo problemas con otro plugin debido a esto.
El plugin se ve así:
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
}
como la verificación devuelve verdadero, el contenido real nunca se mostrará

Prueba esto para tu redirección:
add_action( 'template_redirect', function(){
// no se permiten usuarios no autenticados
if( ! is_user_logged_in() )
{
wp_redirect( home_url( '/wp-login.php' ), 302 );
exit();
}
});
para permitir solo a usuarios conectados ver tu sitio.
Generalmente es demasiado tarde usar una redirección directamente en el archivo header.php
, por lo que es mejor usar un hook que se active antes de que se envíen las cabeceras http, como el hook template_redirect
. También es importante que template_redirect
no se active en la página wp-login.php
.

No marcaré esto como una respuesta correcta, ya que la pregunta es diferente, pero esto es interesante y podría ser mi otro problema, lo intentaré

Bien, lo intenté pero no funciona, cuando estoy desconectado, aún puedo ver el sitio. ¿tal vez template_redirect es una acción incorrecta?

Eso es extraño, lo he probado con éxito en una instalación limpia. ¿Quizás estás usando un plugin/tema que está interfiriendo? ¿Tal vez tienes algún problema con las cookies? ¿Has probado esto en otro navegador o limpiado la caché? Puedes intentar con otro hook más temprano como wp
, pero si quieres usar hooks como init
debes cambiar el código anterior para evitar un bucle infinito. ¿Cuál es el resultado de home_url( '/wp-login.php' )
? ¿Qué pasa si reemplazas wp_redirect()
con die( 'Stop!' )
? ¿Agregaste el fragmento de código en tu archivo functions.php
?
