Standardowo gdy użytkownik WordPressa loguje się na swoje konto jest kierowany do backendu (zazwyczaj pod adres …/wp-admin/ jeśli go nie zmieniałeś) gdzie w zależności od roli jaką posiada, a co za tym idzie poziomu uprawnień, może modyfikować dane w swoim profilu, czy zarządzać swoimi artykułami itp…
Bywa jednak, że nie chcemy aby użytkownik był kierowany w to miejsce. Załóżmy, że mamy przygotowaną stronę zarządzania kontem dla użytkownika, ale na froncie (przykładowo pod adresem wpmania.pl/konto), która wizualnie wpisuje się w layout naszej witryny. W takiej sytuacji najlepiej jest przekierować użytkownika zaraz po tym gdy się zaloguje właśnie na taki adres.
W jakiś jeszcze sytuacjach warto zadbać o tego typu przekierowanie:
- Po to aby uniknąć interakcji z zapleczem naszego WordPressa, kierując użytkowników bezpośrednio na stronę główną lub dowolną inną jaką w przekierowaniu ustawimy
- Po to aby odsyłać użytkowników do strony ich profilu publicznego.
- Po to by odsyłać ich do strony, na której byli przed zalogowaniem.
- W przypadku witryn członkowskich np. po to by skierować zalogowanych użytkowników na stronę, na której znajdują się artykuły lub filmy dostępne tylko dla nich.
- W przypadku forów po to aby odesłać użytkowników do głównej strony forum.
- W przypadku witryn e-commerce po to by skierować kupujących do strony sklepu, ich listy życzeń, strony konta… itp.
To tylko kilka przykładów jakie przyszły mi na myśl. Być może w Twoim przypadku jest jeszcze inny powód dla którego takie przekierowanie chcesz wdrożyć.
Klasyczne przekierowanie
Raczej się nie sprawdzi, ponieważ jeśli takowe utworzymy wówczas każdy kto spróbuje uruchomić adres panelu …/wp-admin/ zostanie przekierowany na adres …/konto/ (przyjmujemy, że tu chcemy kierować użytkowników). Oznacza to, że nawet Ty jako administrator strony nie będziesz się mógł dostać do backendu. To rozwiązanie stanowczo odpada.
Przekierowanie z warunkiem
Zdecydowanie lepszym rozwiązaniem jest utworzenie przekierowania, które zidentyfikuje rolę użytkownika i na tej podstawie skieruje go pod taki lub inny adres. Prosty przykład:
Chcemy, żeby wszyscy użytkownicy poza administratorami byli przekierowywani na adres …/konto/ natomiast dla użytkowników z prawami admina to przekierowanie nie będzie wywoływane czyli Administrator spokojnie będzie mógł wejść pod adres …/wp-admin/ i zarządzać WordPressem.
Takiego przekierowania nie ustawisz regułami w pliku .htaccess, ani korzystając z narzędzi do tworzenia przekierowań we wtyczkach SEO takich jak Rank Math czy Yoast SEO. Jak więc to zrobić?
Sposób 1: Wtyczka
Jak zwykle gdy czegoś potrzebujemy z pomocą przychodzą gotowe wtyczki WordPress, które wystarczy zainstalować i odpowiednio skonfigurować. Z wtyczki o której poniżej korzystałem na starej wersji PoznajWP. Wtedy jeszcze inaczej się nazywała i miała znacznie mniej możliwości, ale od tego czasu fajnie się rozwinęła i przez wielu uważana jest za najlepszą tego typu.
Dlaczego teraz z niej nie korzystam? Nie dlatego, że przestała mi się podobać. Po prostu inna wtyczka z której korzystam ma oprócz innych funkcji także opcję przekierowań wg ról, więc żeby nie mnożyć wtyczek z LoginWP zrezygnowałem na PoznajWP 2.0.
LoginWP
Wtyczka bardzo lubiana i ceniona za niezawodność i prostotę. Dostępna jest zarówno w wersji bezpłatnej (repozytorium WordPress) jak również w wersji PRO z bardziej zaawansowanymi opcjami.
Przy jej pomocy, w prosty sposób utworzysz przekierowania nie tylko w momencie zalogowania się użytkownika, ale także przekierujesz go gdzie zechcesz w momencie gdy się wyloguje :) Zobaczymy jak korzystając z tej wtyczki możesz utworzyć takie przekierowanie.
Tworzymy przekierowanie w LoginWP
Gdy wtyczkę zainstalujesz powinieneś znaleźć w lewym menu WordPressa po stronie backendu sekcję tej wtyczki, a w niej przejście do listy utworzonych reguł przekierowań oraz możliwość przejścia do ogólnych ustawień wtyczki (jest tu także opcja integracji z FuseWP):
Po przejściu na stronę z wykazem reguł przekierowań kliknij w przycisk utworzenia nowego:
Teraz pozostaje skonfigurować regułę przekierowania zgodnie z własnymi potrzebami.
Najpierw wybierz warunek na którym reguła będzie bazowała. W naszym przykładzie chcemy przekierowywać użytkowników wg ich ról więc wybieram z listy “User Role” jak na obrazku poniżej, ale zwróć uwagę że masz tu także możliwość przekierowania konkretnego użytkownika o wybranej nazwie “Username”, a nawet możesz tworzyć przekierowania na bazie specyficznych uprawnień użytkowników “User Capability”.
Skoro wybraliśmy warunek bazujący na roli użytkownika musimy teraz tę rolę wskazać. Załóżmy, że będę chciał przekierować wszystkich użytkowników mających rolę Subskrybenta. Wybieram ja z listy.
Ostatni krok to wpisanie adresów URL na które chcesz przekierować użytkowników mających rolę Subskrybenta po zalogowaniu się jak i po wylogowaniu się.
W naszym przykładzie gdy użytkownik się zaloguje zostanie przekierowany pod adres wpmania.pl/konto/ natomiast gdy się wyloguje zostanie przekierowany na główną stronę serwisu. Oto jak wygląda konfiguracja takiego przekierowania:
Zauważ, że użyłem specjalnego znacznika {{website_url}}, który dynamicznie będzie zastąpiony aktualnym adresem URL naszej witryny. Mógłbym równie dobrze wpisać adres w postaci https://wpmania.pl/konto/ ale jeśli kiedyś przyjdzie mi do głowy zmienić domenę wówczas musiałbym pamiętać także o tym miejscu i te adresy zaktualizować. W sytuacji gdy użyję dynamicznego znacznika mogę o tym zapomnieć :)
Dostępne znaczniki znajdziesz klikając w link View Avaiable Placeholders:
Na koniec zapisz regułę i przetestuj czy działa poprawnie. Dla każdej roli tworzysz osobną regułę.
Sposób 2 – Kod
Wtyczki są bardzo wygodne, to prawda, ale jeśli nie boisz się dotknąć kodu może się okazać, że ta druga metoda utworzenia przekierowania będzie bardziej korzystna przynajmniej pod kilkoma względami. Wtyczki często mają więcej możliwości niż tego realnie potrzebujemy, potrafią mniej lub bardziej obciążać WordPressa, a dodatkowo mogą stanowić furtkę dla włamywaczy jeśli kod wtyczki ma luki, a zdarza się to najlepszym i to wcale nie rzadko.
Dlatego warto rozważyć możliwość utworzenia przekierowania wykorzystując fragment kodu (poniżej masz gotowca do wykorzystania na zasadzie kopiuj wklej), który w prosty sposób dostosujesz do własnych potrzeb zmieniając tylko adresy przekierowań i nazwy ról.
Ten kod możesz umieścić w pliku functions.php motywu potomnego lub możesz użyć innej wtyczki, która takie fragmenty kodu pozwala dodawać i odpowiednio porządkować bez konieczności grzebania w plikach motywu. Może to być np. wtyczka WPCode. Rzućmy okiem na dwa przykłady kodu:
Powyższe przykłady robią w zasadzie to samo co wcześniejsze ustawienia przekierowań z wykorzystaniem wtyczki LoginWP. Użytkowników mających rolę Subskrybenta po zalogowaniu przekierują na podstronę wpmania.pl/konto, a przy wylogowaniu na stronę główną. Oczywiście różnica polega na tym, że w tym wypadku nie trzeba instalować żadnej dodatkowej wtyczki.
Podsumowanie
Jak widzisz przekierowanie użytkowników na dowolnie wybrany adres po tym gdy się zalogują na twojej stronie nie jest trudnym zadaniem. Możesz to zrobić wykorzystując jedną z wielu wtyczek, ponieważ ta o której napisałem nie jest jedyną (mógłbym jeszcze wymienić, np.: WP Login and Logout Redirect czy Sky Login Redirect).
Drugim sposobem jest wykorzystanie prostego kodu w motywie potomnym, który jest w stanie zrobić to samo, ale bez konieczności instalowania kolejnej wtyczki, co dla niektórych jest istotnym czynnikiem mającym wpływ na optymalizację i bezpieczeństwo witryny. Który z tych sposobów Tobie przypadnie do gustu tego nie wiem, ale jedno jest pewne. Obie metody działają :)