Sito web visibile solo agli utenti registrati
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.

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 ] );

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.

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.

@cybnet Senza quel controllo aggiuntivo, a volte fallisce.

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.

Ho trovato la risposta, è semplice con il CSS...
- Il div principale (.lor1) è il div comune che inizia dopo l'header e termina prima del footer
- Aggiungi una nuova classe (.lor1.kun) al div principale quando l'utente è loggato, questa classe principale avrà display: block;
- 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 } ?>

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

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.
