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.
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_redirect
oznacza 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.
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.