WordPress

Przekieruj użytkownika, jeśli jest zalogowany

  • 26 kwietnia, 2020
  • 3 min read
Przekieruj użytkownika, jeśli jest zalogowany


Metoda 1

Mógłbyś użyć login_redirect filtruj, aby dodać adres URL przekierowania logowania.

Filtr przekazuje 3 argumenty

// refer to /wp-login.php
   /**
    * Filters the login redirect URL.
    *
    * @since 3.0.0
    *
    * @param string           $redirect_to           The redirect destination URL.
    * @param string           $requested_redirect_to The requested redirect destination URL passed as a parameter.
    * @param WP_User|WP_Error $user                  WP_User object if login was successful, WP_Error object otherwise.
    */

Poniższy przykład po prostu przekazuje adres URL, możesz również przekazać argument $user i przekierować według różnych użytkowników.

add_filter( 'login_redirect', 'ws365094_logout_redirect_to', 10, 3 );
function ws365094_logout_redirect_to( $redirect_to_url, $requested_redirect_to, $user ) {
  // any additional logic

  return site_url( '/my-account' ); // just pass this url, after login, it will be redirected by WordPress original login routine
}

Metoda 2

Jeśli masz niestandardowy formularz logowania, możesz przekazać zmienną „redirect_to”, ponieważ wp-login.php sprawdzi, czy taki istnieje. Jeśli przekierujesz wszystkich do tego samego adresu URL, ta metoda jest prostsza niż metoda 1.

  <input type="hidden" name="redirect_to" value="somewhere_url" />

Możesz również użyć oryginalnej metody wylogowania logout_redirect filter, aby dodać adres URL przekierowania wylogowania zamiast template_redirect działanie. template_redirect jest dość uniwersalny, ale ma więcej przypadków użycia w przekierowaniu do określonego szablonu (kontrola szablonu). Tylko dodatkowe uwagi w celach informacyjnych.

Warto przeczytać!  tworzenie wtyczek — Jak używać funkcji setAttributes poza powrotem funkcji edycji

Porównanie sekwencji między template_redirect I login_redirect

Zgodnie z kolejnością ładowania. Domyślnie po zalogowaniu WordPress przekierowuje użytkownika na określoną stronę w celu uruchomienia pliku cookie, na który odpowiedziałem tutaj wcześniej.

Login -> Redirect -> Template Redirect(canonical) which is normally done by redirect_canonical() if slug does not found, go to 404, if using /?p=111, check if permalink is in used, if so, direct to permalink structured url and so on

Jeśli używasz template_redirectoznacza to, że strona jest obsługiwana template-loader.php. Staje się

Login -> Redirect -> Template Redirect(canonical) -> Custom Template Redirect

Ponieważ wynika to z do_action( 'template_redirect’ ) w module ładującym szablony, który w tym przypadku ładuje się wiele razy. Jednym ze sposobów optymalizacji skryptu jest użycie wyższego priorytetu dla niestandardowego template_include hook, aby sprawdzał i przekierowywał wcześniejsze działanie podobne do Przekierowania logowania.

Od dotarcia template_redirect jest trochę spóźniony czas ładowania. Nadal nie jest to więc idealne miejsce do sprawdzania logowania użytkownika i przekierowania do miejsca, które nie jest związane z szablonami.

Warto przeczytać!  Jak dodać stronę postu z przycisku bez ponownego ładowania

Tak więc, o ile nie jest to konieczne, takie jak przepisanie, niestandardowa struktura adresu URL lub przygotowanie niestandardowego szablonu. Używanie go w późniejszym czasie nie jest zalecane. Ponadto, jeśli przekierowanie jest obsługiwane nieumiejętnie, może to również wpłynąć na ranking SEO. Jest to oparte na rzeczywistej sekwencji ładowania, punkcie widzenia optymalizacji SEO i osobistych doświadczeniach.


Źródło