Jak przekierować niezalogowanych użytkowników na określoną stronę?


16

Jak przekierować niezalogowanych użytkowników żądających określonej strony / adresu URL na inną stronę / adres URL i wyświetlić komunikat w rodzaju „tylko dla członków”. Wiem, że jego kodowanie jest dość łatwe przy użyciu! Is_user_logged_in (), ale nie wiem, jak to kodować, ponieważ jestem nowicjuszem w WordPress. Powiedz mi, żeby plik umieścił również kod.

Odpowiedzi:


30

Oto 2 przykłady, które należy nieco zmodyfikować, aby działały zgodnie z konkretnymi potrzebami.

add_action( 'admin_init', 'redirect_non_logged_users_to_specific_page' );

function redirect_non_logged_users_to_specific_page() {

if ( !is_user_logged_in() && is_page('add page slug or ID here') && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {

wp_redirect( 'http://www.example.dev/page/' ); 
    exit;
   }
}

Umieść to w pliku funkcji motywu podrzędnego, zmień identyfikator strony lub informacje o treści i adres URL przekierowania.

Możesz również użyć takiego kodu:

add_action( 'template_redirect', 'redirect_to_specific_page' );

function redirect_to_specific_page() {

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

wp_redirect( 'http://www.example.dev/your-page/', 301 ); 
  exit;
    }
}

Możesz dodać wiadomość bezpośrednio do strony lub jeśli chcesz wyświetlić wiadomość dla wszystkich niezalogowanych użytkowników, dodaj ją do kodu .

http://codex.wordpress.org/Function_Reference/wp_redirect


Dziękuję za odpowiedź. Podobało mi się to, add_action('template_redirect', 'redirect_to_specific_page'); function redirect_to_specific_page() { if ( is_page('http://mydomain.com/participate') && !is_user_logged_in()) { wp_redirect('http://mydomain.com/login', 301); exit; } }ale to nie działa
użytkownik3187719,

Użyj tutaj identyfikatora strony lub informacji o ślimaku , a nie adresu URL mojadomena.com/participate codex.wordpress.org/Conditional_Tags
Brad Dalton

is_page („Weź udział”)
Brad Dalton

9

Byłoby lepiej:

if ( !is_user_logged_in() ) {
    auth_redirect();
} 

// continue as normal for authenticated users

Powoduje to przekierowanie użytkownika na stronę logowania. Po zalogowaniu użytkownik zostaje przekierowany z powrotem do bezpiecznej strony, do której próbował uzyskać dostęp na początku.

Dokumentacja tutaj:

https://codex.wordpress.org/Function_Reference/auth_redirect


4

Jak możemy Ci powiedzieć, gdzie go umieścić, jeśli nie powiedziałeś nam, co i gdzie chcesz go wyświetlić? Całe posty? Strony? Niestandardowe części stron? Przepraszam ... Wydaje mi się, że moja kryształowa kula dzisiaj nie działa.

Ponieważ jesteś, a ja cytuję: „nowicjusz w wordpress” powinieneś raczej nauczyć się niż prosić o bezpośrednią odpowiedź.

Jeśli chodzi o to, gdzie powinieneś przeczytać odnośnik 1 link. Dzięki temu dowiesz się, w którym pliku chcesz go umieścić.

Aby dowiedzieć się, jak to zrobić, najpierw przeczytaj link referencyjny 2 i 3.

Ogólnie powinno to wyglądać mniej więcej tak:

if ( is_user_logged_in() ) {
    the_content();
} else {
    echo 'For members only';
}

Oczywiście powyższy kod musi przejść do pętli . Możesz zbudować go tak złożonym lub tak prostym, jak chcesz. Na przykład zamiast prostego tekstu, jeśli się nie zalogujesz, możesz na przykład wyświetlić cały formularz rejestracji lub - jak sugerowałbym - podzielony ekran, na którym użytkownik może się zalogować (ponieważ użytkownik może mieć konto, ale zapomniał się zalogować) lub zarejestrować się (jeśli go nie ma).

  1. Hierarchia szablonów
  2. Tagi warunkowe
  3. Pętla

Dodano po komentarzach poniżej:

Aby przekierować za pomocą headerprzycisku wp_login_url- ponownie, sprawdź odnośniki 1 i 2 poniżej:

if ( is_user_logged_in() ) {
    the_content();
} else {
    header('Location: ' . wp_login_url());
}

Odniesienie:

  1. Nagłówek - PHP
  2. wp_login_url

W rzeczywistości nie znam funkcji WordPress, która zwraca żądany adres URL lub link bezpośredni. A jeśli chodzi o wiadomość dispaly, zostaw ją, chcę po prostu przekierować ją, gdy zażądają określonego adresu URL bez logowania.
user3187719,

czy mogę to zrobić za pomocą $ pagenow?
user3187719,

@ user3187719 zredagował moją oryginalną odpowiedź i dodał rozwiązanie przekierowania. PS. $pagenow? Próbujesz zabić muchę za pomocą armaty, która na pewno zadziała, ale dlaczego tak skomplikowana? Nie komplikuj. PS2: Naucz się kodeksu PHP i WP.
Borek

4

Nie można przekierować na określoną stronę, ale każdy niezalogowany użytkownik zostanie przekierowany do ekranu logowania.

<?php auth_redirect(); ?>

Dokumentacja Wordpress: auth_redirect()

Wystarczy wspomnieć o innym rozwiązaniu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.