Sitio web visible solo para usuarios registrados

17 dic 2012, 13:13:19
Vistas: 14.8K
Votos: 4

¿Cómo puedo deshabilitar el acceso a usuarios no registrados? Si el usuario no ha iniciado sesión me gustaría redirigirlo a una página personalizada de registro/login. ¿Es posible hacer esto con el siguiente código ya que no quiero usar un plugin?

<?php
if ( is_user_logged_in() ) {
    echo '¡Bienvenido, usuario registrado!';
} else {
    echo '¡Bienvenido, visitante!';
}
?>

Gracias.

0
Todas las respuestas a la pregunta 7
4
10

Escribe esto en un plugin:

add_action( 'template_redirect', 'auth_redirect' );

Como plugin en GitHub.

Esto forzará a todos los visitantes a iniciar sesión si no lo han hecho ya.

En algunos casos, esto solicita un inicio de sesión cada vez. Esto podría funcionar mejor:

is_admin() || add_action( 'template_redirect', function() {
    if ( ! is_user_logged_in() )
        auth_redirect();
});

Si deseas enviar un estado 404 en su lugar, puedes reemplazar el auth_redirect() con:

wp_die( 'No.', 'No encontrado', [ 'response' => 404 ] );
17 dic 2012 13:49:55
Comentarios

Hola, ¿hay alguna manera de redirigirlo a una página específica?

Dev Guy Dev Guy
17 dic 2012 15:54:28

Por defecto el visitante será redirigido a la página que intentó ver. Podrías escribir un envoltorio muy similar a auth_redirect() y configurar $login_url a una página específica.

fuxia fuxia
17 dic 2012 16:13:36

Creo que puede ser aún más simple eliminando is_user_logged_in() y dejando solo auth_redirect() porque auth_redirect() funciona de la siguiente manera: si el usuario está logueado no hace nada. Si el usuario no está logueado lo redirige a la página de inicio de sesión.

cybmeta cybmeta
7 may 2014 18:57:09

@cybnet Sin esa verificación adicional, a veces falla.

fuxia fuxia
7 may 2014 19:01:05
0

Si no deseas modificar tu código, podrías utilizar este plugin en su lugar: Restricted Site Access. Tiene una alta valoración y, en mi experiencia personal, funciona muy bien.

Limita el acceso a tu sitio solo a visitantes que hayan iniciado sesión o accedan desde un conjunto de direcciones IP específicas. Puedes enviar a los visitantes restringidos a la página de inicio de sesión, redirigirlos o mostrarles un mensaje o página. Una gran solución para Extranets, Intranets alojadas públicamente o sitios de desarrollo/pruebas paralelos.

17 dic 2012 14:44:26
0

Probablemente solo necesites colocar lo siguiente en tu functions.php:

if ( is_user_logged_in() ) {
    echo '¡Bienvenido, usuario registrado!';
} else {
    wp_redirect(site_url('/wp-login.php?action=register'));
    exit();
}
17 dic 2012 13:44:04
0

Obtuve la respuesta, es fácil con CSS...

  1. El div principal (.lor1) significa el div común que comienza después del encabezado y termina antes del pie de página
  2. Añade una nueva clase (.lor1.kun) en el div principal cuando el usuario inicie sesión, esta clase principal tendrá display: block;
  3. Crea un nuevo HTML Ej. mostrar mensaje "inicia sesión primero" (.lor1.user_not_login)

AÑADE este código en header.php

<?php     
if (!is_user_logged_in()) {
?> 
<style>
.lor1{ display:none;}
.lor1.kun{ display: block;}
.lor1.user_not_login{ display: block;}
</style>
<?php }  ?>
19 dic 2013 10:41:02
0

Bueno, tu código en realidad es funcional. Solo tienes que llamar a los módulos correctos en los lugares adecuados.

if( !is_user_logged_in() ){
    // mostrar_panel_registro() 
} else {
   // Es un usuario registrado. Proceder como de costumbre
}
9 ene 2014 04:45:02
0

Añade esta función a tu archivo functions.php.

Cuando un usuario no esté conectado e intente acceder a la página de inicio (ID de página == 2), será redirigido a la página de login.

<?php
add_action('template_redirect','wpse64899_check_if_logged_in');
function wpse64899_check_if_logged_in()
{
    $pageid = 2; // o el ID que desees
    if(!is_user_logged_in() && is_page($pageid))
    {
        $url = add_query_arg(
            'redirect_to',
            get_permalink($pageid),
            site_url('wp-login.php')
        );
        wp_redirect($url);
        exit;
    }
} ?>
9 ene 2014 06:22:05
0

Agrega este código en el archivo function.php de tu tema hijo o tema padre

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

if ( is_page('home') && ! is_user_logged_in() ) {

wp_redirect( 'https://example.com/login', 301 ); 
  exit;
    }
}

Por favor reemplaza "home" con el slug de la página, es decir, esta es la página que no quieres que tus usuarios accedan sin iniciar sesión. También reemplaza esta URL "https://example.com/login" con la URL de destino a donde quieres redirigir a tus usuarios si no han iniciado sesión, es decir, esta URL debería dirigir a tu página de inicio de sesión o registro.

20 abr 2017 12:11:38