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é
CBeTJlu4ok
Bien, lo intenté pero no funciona, cuando estoy desconectado, aún puedo ver el sitio. ¿tal vez template_redirect es una acción incorrecta?
CBeTJlu4ok
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?
birgire