Site vizibil doar pentru utilizatorii înregistrați
Cum pot restricționa accesul pentru utilizatorii neînregistrați? Dacă utilizatorul nu este autentificat, aș dori să fie redirecționat către o pagină personalizată de înregistrare/login. Este posibil acest lucru folosind codul de mai jos, deoarece nu doresc să folosesc un plugin.
<?php
if ( is_user_logged_in() ) {
echo 'Bine ai venit, utilizator înregistrat!';
} else {
echo 'Bine ai venit, vizitator!';
}
?>
Mulțumesc.

Scrieți acest lucru într-un plugin:
add_action( 'template_redirect', 'auth_redirect' );
Ca plugin pe GitHub.
Aceasta va forța toți vizitatorii să se autentifice dacă nu sunt deja autentificați.
În unele cazuri, aceasta poate cere autentificarea de fiecare dată. Această variantă ar putea funcționa mai bine:
is_admin() || add_action( 'template_redirect', function() {
if ( ! is_user_logged_in() )
auth_redirect();
});
Dacă doriți să trimiteți un status 404 în schimb, puteți înlocui auth_redirect()
cu:
wp_die( 'Nu.', 'Nu a fost găsit', [ 'response' => 404 ] );

Bună, Există vreo modalitate de a redirecționa către o pagină specifică?

În mod implicit, vizitatorul va fi redirecționat către pagina pe care a încercat să o vizualizeze. Ai putea scrie un wrapper foarte similar cu auth_redirect()
și să setezi $login_url
către o pagină specifică.

Cred că poate fi chiar mai simplu prin eliminarea is_user_logged_in()
și lăsând doar auth_redirect()
deoarece auth_redirect()
funcționează astfel: dacă utilizatorul este autentificat, nu face nimic. Dacă utilizatorul nu este autentificat, îl redirecționează către pagina de login.

@cybnet Fără acea verificare suplimentară, uneori nu funcționează.

Dacă nu doriți să vă modificați codul, puteți folosi în schimb acest plugin: Restricted Site Access. Are evaluări foarte bune și din experiența mea personală, funcționează foarte bine.
Limitați accesul la site pentru vizitatorii care nu sunt autentificați sau care accesează site-ul de la un set de adrese IP specificate. Pentru vizitatorii restricționați, puteți trimite spre pagina de autentificare, puteți face o redirecționare sau puteți afișa un mesaj sau o pagină. O soluție excelentă pentru Extranet-uri, Intranet-uri găzduite public sau site-uri de dezvoltare/stagiu paralel.

Am primit răspunsul, este ușor cu CSS...
- Div-ul principal (.lor1) înseamnă div-ul comun care începe după header și se termină înainte de footer
- Adaugă o nouă clasă (.lor1.kun) în div-ul principal când utilizatorul este autentificat, această clasă principală va fi display: block;
- Creează un nou HTML Ex. pentru a afișa mesajul "loghează-te mai întâi" (.lor1.user_not_login)
ADAUGĂ acest cod în header.php
<?php
if (!is_user_logged_in()) {
?>
<style>
.lor1{ display:none;}
.lor1.kun{ display: block;}
.lor1.user_not_login{ display: block;}
</style>
<?php } ?>

Adaugă această funcție în fișierul tău functions.php.
Când un utilizator nu este autentificat și accesează pagina principală (ID-ul paginii == 2), va fi redirecționat către pagina de autentificare.
<?php
add_action('template_redirect','wpse64899_check_if_logged_in');
function wpse64899_check_if_logged_in()
{
$pageid = 2; // sau orice alt ID dorești
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;
}
} ?>

Adăugați acest cod în fișierul function.php al temei Child a temei 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;
}
}
Vă rugăm să înlocuiți "home" cu numele slug-ului paginii, adică aceasta este pagina pe care nu doriți ca utilizatorii să o acceseze fără să fie autentificați și să înlocuiți acest URL "https://example.com/login" cu URL-ul destinației unde doriți să redirecționați utilizatorii dacă nu sunt autentificați, adică acest URL ar trebui să direcționeze către pagina de autentificare sau înregistrare.
