Site vizibil doar pentru utilizatorii înregistrați

17 dec. 2012, 13:13:19
Vizualizări: 14.8K
Voturi: 4

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.

0
Toate răspunsurile la întrebare 7
4
10

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 ] );
17 dec. 2012 13:49:55
Comentarii

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

Dev Guy Dev Guy
17 dec. 2012 15:54:28

Î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ă.

fuxia fuxia
17 dec. 2012 16:13:36

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.

cybmeta cybmeta
7 mai 2014 18:57:09

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

fuxia fuxia
7 mai 2014 19:01:05
0

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.

17 dec. 2012 14:44:26
0

Probabil că trebuie doar să adaugi următoarele în functions.php:

if ( is_user_logged_in() ) {
    echo 'Bun venit, utilizator înregistrat!';
} else {
    wp_redirect(site_url('/wp-login.php?action=register'));
    exit();
}
17 dec. 2012 13:44:04
0

Am primit răspunsul, este ușor cu CSS...

  1. Div-ul principal (.lor1) înseamnă div-ul comun care începe după header și se termină înainte de footer
  2. Adaugă o nouă clasă (.lor1.kun) în div-ul principal când utilizatorul este autentificat, această clasă principală va fi display: block;
  3. 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 }  ?>
19 dec. 2013 10:41:02
0

Ei bine, codul tău este de fapt funcțional. Trebuie doar să apelezi modulele corecte în locurile potrivite.

if( !is_user_logged_in() ){
    // show_registration_panel() 
} else {
   // Este un utilizator înregistrat. Continuă ca de obicei
}
9 ian. 2014 04:45:02
0

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;
    }
} ?>
9 ian. 2014 06:22:05
0

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.

20 apr. 2017 12:11:38