Kurs "WordPress: Pierwsze kroki" (na dobry początek)

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
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)
Patryk
Tworzysz stronę internetową i potrzebujesz pomocy?