Obserwuj nas

Cześć, czego szukasz?

WordPress

Jak w WordPressie wyłączyć witrynę? I jak zmodyfikować wygląd strony z komunikatem?

Przy aktualizacji wtyczek, skórek czy samego rdzenia z poziomu kokpitu czy zdalnie via x usługa albo komendą wp core update z wiersza poleceń (WP-CLI), WordPress sam od siebie wyłącza stronę, czyli aktywuje się tryb przerwy technicznej. W tym czasie, gdy ktoś będzie chciał wejść na stronę zobaczy czystą stronę z komunikatem, że witryna została czasowo wyłączona.

Taka strona nie jest zbyt ładna i z pewnością będziemy chcieli ją poprawić wizualnie, a może i wstawić własny kawałek treści czy skrypt statystyk. W tym celu tworzymy plik maintenance.php i dodajemy do niego najzwyklejszy kod html naszej strony, jedynie co to na początku i na końcu dodajemy dodatkowo kawałek kodu PHP. Poniżej przykładowa zawartość dla tego pliku.

<?php
$protocol = $_SERVER["SERVER_PROTOCOL"];
if ( 'HTTP/1.1' != $protocol &amp;&amp; 'HTTP/1.0' != $protocol ) $protocol = 'HTTP/1.0';
header( "$protocol 503 Service Unavailable", true, 503 );
header( 'Content-Type: text/html; charset=utf-8' );
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<title>Przerwa techniczna</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
html {
background: #f1f1f1;
}
body {
background: #fff;
color: #444;
font-family: "Open Sans", sans-serif;
margin: 2em auto;
padding: 1em 2em;
max-width: 700px;
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.13);
box-shadow: 0 1px 3px rgba(0,0,0,0.13);
}
h1 {
border-bottom: 1px solid #dadada;
clear: both;
color: #666;
font: 24px "Open Sans", sans-serif;
margin: 30px 0 0 0;
padding: 0;
padding-bottom: 7px;
}
#error-page {
margin-top: 50px;
}
#error-page div {
font-size: 14px;
line-height: 1.5;
margin: 25px 0 20px;
}
ul li {
margin-bottom: 10px;
font-size: 14px ;
}
a {
color: #21759B;
text-decoration: none;
}
a:hover {
color: #D54E21;
}
</style>
</head>
<body id="error-page">
<div>Przerwa techniczna, wracamy niebawem.</div>
</body>
</html>
<?php die(); ?>

view raw
maintenance.php
hosted with ❤ by GitHub

Jak już naniesiemy własne zmiany to wrzucamy ten plik maintenance.php do folderu wp-content. WordPress ma zaszytą funkcję, która sprawdza czy w tej lokalizacji znajduje się taki plik, jeżeli tak to bierze go pod uwagę, a jeżeli nie to leci domyślny wygląd i komunikat. Także od tego momentu jeżeli będziemy coś aktualizować to wyświetli się zawartość utworzonego przez nas pliku maintenance.php.

Niekiedy może zajść potrzeba odpalenia trybu przerwy technicznej aby nadpisać bazę z kopii zapasowej (tworzycie, prawda? ;), jakaś wtyczka spłatała figla czy powstała inna usterka, która wymaga naprawy a nie chcemy aby w tym czasie na stronie działy się cuda i były widoczne komunikaty debugowania (wp-config.php → define('WP_DEBUG', true);). Oczywiście powodem takiego trybu przerwy może też być coś prostszego – zmieniamy skórkę i chcemy ją poustawiać, powsadzać widgety do sidebarów i przede wszystkim sprawdzić czy wszystko jest ok zanim zaprezentujemy nowe fatałaszki swoim odwiedzającym.

Tryb przerwy technicznej można aktywować poprzez zainstalowanie wtyczki jak przykładowo WP Maintenance Mode. Wtyczka ta nie tylko umożliwia wyłączenie czasowo witryny ale i oferuje przygotowanie własnej strony z komunikatem o przerwie technicznej jaka ukaże się odwiedzającym. Dodajemy treść jaka ma się ukazać, wybieramy jeden z gotowych szablonów i wuala. Poniżej przykład.

 

Ale jak unikasz instalacji niepotrzebnych wtyczek albo takich co się użyje raz na ruski rok to można to rozwiązać inaczej. Przeważnie i tak będziemy wchodzić na serwer, aby usunąć jakąś usterkę czy aby wgrać nową skórkę (oczywiście to akurat można zrobić z poziomu kokpitu), więc możemy dodać do pliku functions.php aktywnej skórki poniższy kawałek kodu:

function maintenace_mode() {
if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {wp_die('Treść komunikatu','Tytuł strony');}
}
//add_action('get_header', 'maintenace_mode');

I gdy chcemy włączyć tryb przerwy technicznej to wystarczy odkomentować akcję get_header przez usunięcie „//”. Po zapisaniu zmian w tym pliku witryna staje się niedostępna dla każdego niezalogowanego użytkownika i każdego zalogowanego z uprawnieniami nie pozwalającymi na edycję skórki, czyli dla usera z niższymi uprawnieniami niż admin.

wp die

Użycie funkcji wp_die oznacza, że wyświetlona blokada dostępu korzysta z zaszytego w bebechach wordpressa stylu, który wygląda jak wyżej, szare tło i biały blok z naszym tekstem. Jeżeli nam to pasuje to zostawiamy jak jest, jeżeli nie to możemy taką stronę dostosować pod siebie przez filtr wp_die_handler ale nie ma potrzeby bo jest jeszcze inny fajniejszy sposób na aktywowanie trybu przerwy technicznej.

Korzystając z tekstowego edytora tworzymy plik o nazwie .maintenance i wrzucamy do niego poniższą zawartość.

<?php
function is_user_logged_in() {
$loggedin = false;
foreach ( (array) $_COOKIE as $cookie =&gt; $value ) {
if ( stristr($cookie, 'wordpress_logged_in_') )
$loggedin = true;
}
return $loggedin;
}
if ( ! stristr($_SERVER['REQUEST_URI'], '/wp-admin') && ! stristr($_SERVER['REQUEST_URI'], '/wp-login.php') && ! is_user_logged_in() )
$upgrading = time();

view raw
.maintenance
hosted with ❤ by GitHub

Zapisujemy plik i trzymamy gdzieś pod ręką. W sytuacji, gdy będziemy chcieli aktywować tryb przerwy technicznej to wystarczy skopiować ten plik i wrzucić na serwer do głównej lokalizacji – tam gdzie znajduje się plik wp-config.php. Podobnie jak wcześniej WordPress ma zaszytą funkcję, która sprawdza czy plik o takiej nazwie istnieje, ale w tym przypadku nie szuka go w wp-content a w głównej lokalizacji, jeżeli tak aktywuje się przerwa techniczna.

Aby dezaktywować tryb przerwy technicznej to wystarczy usunąć ten plik. Opcjonalnie trzymamy ten plik cały czas na serwerze i przy dezaktywacji usuwamy kropkę z jego nazwy na początku a przy chęci aktywowania przerwy technicznej dodajemy kropkę na początku jego nazwy 🙂

Taki sam plik tylko o innej zawartości jest tworzony podczas aktualizacji i niekiedy zdarza się, że trzeba go ręcznie usunąć bo z jakiejś przyczyny nie został usunięty automatycznie i tym samym tryb przerwy technicznej jest cały czas aktywny.

Advertisement
Advertisement
Advertisement

Zobacz także

WordPress

Być może planujesz restart witryny na nowym motywie, a może jakieś inne prace na czas których chcesz wyłączyć witrynę o zaplanowanym terminie i ponownie...

Drupal

A to ci łobuz z tego modułu. Zasłoni zawartość strony przed odwiedzającymi z aktywnymi rozszerzeniami w przeglądarce blokującymi reklamy jak AdBlock. Zamiast zawartości komunikat...

WordPress

Szukasz wtyczki do wyświetlania informacji o ciasteczkach? Może WP Cookie Law Info? Wyświetla informację w formie okienka w lewym lub prawym dolnym rogu okna przeglądarki,...

Drupal

Domyślne działanie trybu przerwy technicznej, aktywowanego ręcznie (z poziomu panelu zarządzania lub konsoli via Drush) lub automatycznie (np: podczas aktualizacji modułu), blokuje wszelkie działania...