if(!is_user_logged_in()) devuelve verdadero en páginas 404 - Solución WordPress

29 ene 2014, 21:05:18
Vistas: 16.4K
Votos: 1

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á

7
Comentarios

¿Dónde estás haciendo tu verificación? Solo puedes hacer una redirección antes de que se genere cualquier HTML. Si llamas a una redirección después de que el contenido haya comenzado a enviarse, será ignorada.

Seamus Leahy Seamus Leahy
29 ene 2014 21:18:59

Uso esto en el encabezado, antes del doctype. Pero el problema surge en footer.php. Actualicé mi pregunta. Esto sigue siendo un problema. ¿Puedes confirmar si esto es igual en todas partes? También creo que esto es un error.

CBeTJlu4ok CBeTJlu4ok
29 ene 2014 21:23:51

No estoy teniendo problemas con is_user_logged_in() reportando algo incorrecto en la página 404, incluso en el pie de página. Puede que tengas un plugin que esté cambiando el estado del usuario actual. Necesitas desactivar plugins y temas no predeterminados para determinar si es uno de esos primero. Si el problema existe con una instalación estándar de WordPress, entonces es un problema de WordPress; de lo contrario, tiene que ver con un complemento.

Seamus Leahy Seamus Leahy
29 ene 2014 21:42:24

¿Hay algún enlace que podamos visitar para verlo en acción?

eteich eteich
29 ene 2014 21:44:22

No deberías usar redirección en el archivo header.php, usualmente es demasiado tarde, los headers ya se han enviado. Así que engancha antes, por ejemplo con el hook template_redirect.

birgire birgire
29 ene 2014 21:56:20

@birgire Como una respuesta separada, por favor.

kaiser kaiser
29 ene 2014 22:12:05

@kaiser, gracias por el recordatorio - lo sé, es un mal hábito insinuar la respuesta en los comentarios ;-)

birgire birgire
30 ene 2014 02:52:08
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 1
4

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.

30 ene 2014 02:50:54
Comentarios

Aquí van los votos positivos. ¿Qué tan fácil fue eso? ;)

kaiser kaiser
30 ene 2014 04:31:13

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 CBeTJlu4ok
1 feb 2014 11:05:22

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 CBeTJlu4ok
1 feb 2014 11:08:48

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 birgire
1 feb 2014 18:52:55