Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!

Koleżanka poprosiła mnie o pomoc – potrzebuje aktywować coś na wzór „sprzedażowego trybu konserwacji” w swoim WordPressie. W uproszczeniu polegać ma to na tym, że chciałaby przełączyć stronę w tryb konserwacji, tak by osoby niezalogowane widziały stronę zaślepkę, a resztę stron mogłyby (tymczasowo) oglądać tylko osoby zalogowane. Pozornie nic trudnego, tego typu wtyczek (maintenance mode) jest pełno. Jednak koleżanka chciała, by tymczasowa strona mogła korzystać ze wszystkich dostępnych dobrodziejstw jej WordPressa, łącznie z page builderem…

Rozbudowany tryb konserwacji w WordPressie

I choć jak napisałem – tego typu wtyczek jest pełno, to większość ma własne mechanizmy zarządzania treścią. Czasem bardziej rozbudowane, przypominające trochę generatory stron lądowania (landing page), a czasem możemy wstawić tylko prosty tekst, ew. licznik odliczający czas do końca przerwy.

Możliwe, że są wtyczki, które spełniłyby założenia koleżanki, ale uznałem, że szybciej stworzę jej prostą wtyczkę, która spełni jej wymagania, niż przejrzę katalog tego typu wtyczek.

Podstawowy kod (do pliku functions.php lub jako wtyczka) może wyglądać tak:

function webinsider_wp_maintenance_redirect() {
	if ( is_user_logged_in() ) {
		//echo "Strona działa w trybie konserwacyjnym!";
	} else {
		if ( !is_page( 'maintenance' ) ) {		
			wp_safe_redirect( home_url() . '/maintenance/', 307 );
		}
	}
}
add_action( 'template_redirect', 'webinsider_wp_maintenance_redirect' );

Przekieruje on każdego odwiedzającego, który nie jest zalogowany do WordPressa na podstronę „maintenance”, którą tworzymy w naszym ulubionym edytorze – zwykłym, czy graficznym, korzystając z wszystkiego, co tylko nasz motyw i wtyczki oferują.

Mamy tutaj warunek zapobiegający pętli, który sprawdza, czy użytkownik nie znajduje się na docelowej stronie, wtedy przekierowanie nie jest aktywowane:

if ( !is_page( 'maintenance' ) ) {

Zamiast „maintenance” możemy podać inną stronę, zarówno podając jej nazwę, sluga (adres URL), lub ID:

!is_page( 'Maintenance' ); // Nazwa strony
!is_page( 'maintenance' ); // Slug strony
!is_page( 8 ); // ID strony

Dalej mamy samo przekierowanie, w przedstawionym przypadku na podstonę „maintenance”:

wp_safe_redirect( home_url() . '/maintenance/', 307 );

Można też przekierować na całkowicie inny adres, również w innej domenie:

wp_redirect( 'https://webinsider.pl/maintenance.html', 307 );

Jeśli ze strony korzystają użytkownicy, którzy mają konta, ale nie są np. administratorami, i chcemy, by przekierowanie dotyczyło również ich, wystarczy do kodu dodać odpowiedni warunek:

function webinsider_wp_maintenance_redirect() {
	if ( ( is_user_logged_in() ) && ( current_user_can( 'administrator' ) ) ) {
		//echo "Strona działa w trybie konserwacyjnym!";
	} else {
		if ( !is_page( 'maintenance' ) ) {		
			wp_safe_redirect( home_url() . '/maintenance/', 307 );
		}
	}
}
add_action( 'template_redirect', 'webinsider_wp_maintenance_redirect' );

W tym momencie przekierowanie będzie aktywne dla wszystkich użytkowników, nienależących do grupy „administrator” w WordPressie.

Można oczywiście też wyświetlić np. zwykły komunikat w HTMLu:

function webinsider_wp_maintenance_mode() {
	if ( ( is_user_logged_in() ) && ( current_user_can( 'administrator' ) ) ) {
		//echo "Strona działa w trybie konserwacyjnym!";
	} else {
		echo "Przerwa techniczna. Zapraszamy za kilka minut...";
		exit;
	}
}
add_action( 'wp_head', 'webinsider_wp_maintenance_mode', 1 );add_action( 'wp_head', 'webinsider_wp_maintenance_mode', 1 );

Choć w takim przypadku lepiej skorzystać z funkcji wp_die():

function webinsider_wp_maintenance_mode() {
	if ( ( is_user_logged_in() ) && ( current_user_can( 'administrator' ) ) ) {
		//echo "Strona działa w trybie konserwacyjnym!";
	} else {
		wp_die( 'Przerwa techniczna. Zapraszamy za kilka minut...' );
	}
}
add_action( 'wp_head', 'webinsider_wp_maintenance_mode', 1 );

Jak widać, nie jest to specjalnie skomplikowany kod, ale w większości przypadków spełnia swoje zadanie, można go dodatkowo rozbudowywać wedle potrzeb o dodatkowe warunki. Co najwazniejsze – przekierowanie możemy zrobić na zwykłą podstronę naszego WordPressa. A tym samym możemy nie tylko wykorzystać jedną z istniejących podstron (np. kontakt), ale i utworzyć całkiem nową, korzystając przy tym z wszystkiego, co mamy do dyspozycji na naszej stronie. Można też wyświetlić prosty komunikat tekstowy…

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.

Patryk

CEO Webinsider.pl, a do tego CTO, CIO, CFO, CMO, CSO, COO i CRO ;-)
Pasjonat nowych technologii - od sprzętu po oprogramowanie, od serwerów po smartfony i rozwiązania IoT. Potencjalnie kiepski bloger, bo nie robi zdjęć "talerza" zanim zacznie jeść.

Dumny przyjaciel swoich psów :-)
Envato Elements - pobieraj co chcesz, ile chcesz
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.