Sito web visibile solo agli utenti registrati

17 dic 2012, 13:13:19
Visualizzazioni: 14.8K
Voti: 4

Come posso disabilitare l'accesso agli utenti non registrati? Se l'utente non è loggato vorrei reindirizzarlo a una pagina di registrazione/login personalizzata. È possibile farlo utilizzando il codice sottostante senza usare plugin?

<?php
if ( is_user_logged_in() ) {
    // Visualizza il messaggio per utenti registrati
    echo 'Benvenuto, utente registrato!';
} else {
    // Visualizza il messaggio per visitatori non registrati
    echo 'Benvenuto, visitatore!';
}
?>

Grazie.

0
Tutte le risposte alla domanda 7
4
10

Scrivi questo in un plugin:

add_action( 'template_redirect', 'auth_redirect' );

Come plugin su GitHub.

Questo obbligherà tutti i visitatori a effettuare il login se non lo hanno già fatto.

In alcuni casi, questo chiederà il login ogni volta. Potrebbe funzionare meglio così:

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

Se vuoi inviare uno stato 404 invece, puoi sostituire auth_redirect() con:

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

Ciao, esiste un modo per reindirizzare a una pagina specifica?

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

Per impostazione predefinita il visitatore verrà reindirizzato alla pagina che stava cercando di visualizzare. Potresti scrivere un wrapper molto simile a auth_redirect() e impostare $login_url su una pagina specifica.

fuxia fuxia
17 dic 2012 16:13:36

Penso possa essere ancora più semplice rimuovendo is_user_logged_in() e lasciando solo auth_redirect() perché auth_redirect() funziona così: se l'utente è loggato non fa nulla. Se l'utente non è loggato lo reindirizza alla pagina di login.

cybmeta cybmeta
7 mag 2014 18:57:09

@cybnet Senza quel controllo aggiuntivo, a volte fallisce.

fuxia fuxia
7 mag 2014 19:01:05
0

Se non hai voglia di modificare il tuo codice, potresti utilizzare questo plugin invece: Restricted Site Access. È molto apprezzato e nella mia esperienza personale, funziona davvero bene.

Limita l'accesso al tuo sito ai visitatori che hanno effettuato il login o che accedono da un insieme di indirizzi IP specificati. Reindirizza i visitatori non autorizzati alla pagina di login, a un'altra pagina o mostra un messaggio. Una soluzione perfetta per Extranet, Intranet pubbliche o siti di sviluppo/staging paralleli.

17 dic 2012 14:44:26
0

Probabilmente devi solo inserire il seguente codice nel tuo functions.php:

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

Ho trovato la risposta, è semplice con il CSS...

  1. Il div principale (.lor1) è il div comune che inizia dopo l'header e termina prima del footer
  2. Aggiungi una nuova classe (.lor1.kun) al div principale quando l'utente è loggato, questa classe principale avrà display: block;
  3. Crea un nuovo HTML Es. mostra il messaggio "effettua il login prima" (.lor1.user_not_login)

Aggiungi questo codice in 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

Bene, il tuo codice è effettivamente funzionale. Devi solo chiamare i moduli giusti nei punti giusti.

if( !is_user_logged_in() ){
    // show_registration_panel() 
} else {
   // È un utente registrato. Procedi come al solito
}
9 gen 2014 04:45:02
0

Aggiungi questa funzione al tuo file functions.php.

Quando un utente non è loggato e accede alla home page (ID pagina == 2) verrà reindirizzato alla pagina di login.

<?php
add_action('template_redirect','wpse64899_check_if_logged_in');
function wpse64899_check_if_logged_in()
{
    $pageid = 2; // oppure qualsiasi ID tu voglia impostare
    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 gen 2014 06:22:05
0

Aggiungi questo codice nel file functions.php del tuo tema Child o Parent

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;
    }
}

Per favore sostituisci "home" con lo slug della pagina, cioè questa è la pagina che non vuoi sia accessibile agli utenti senza login, e sostituisci questo URL "https://example.com/login" con l'URL di destinazione dove vuoi reindirizzare gli utenti se non sono loggati, cioè questo URL dovrebbe puntare alla tua pagina di login o registrazione.

20 apr 2017 12:11:38