Seit der WordPress-Version 3.0 versetzt sich WordPress während des Update-Vorgangs in den Wartungsmodus, so dass Besucher der Seite folgende Meldung erhalten:
Für kurze Zeit nicht verfügbar, um eine regelmäßige Instandhaltung durchzuführen. Prüfe in einer Minute erneut.
Dafür erstellt WordPress im Hauptordner die temporäre Datei .maintenance, die es nach erfolgreicher Aktualisierung auch wieder löscht. Wird der Update-Prozess allerdings unterbrochen, dann findet keine Löschung statt und man muss zehn Minuten warten bevor man wieder Zugriff hat. In der .maintenance-Datei ist nämlich ein Zeitcode hinterlegt, der festlegt wann der Wartungsmodus begonnen hat.
Sehr kurzfristig kann man dies nur umgehen, indem man die .maintenance-Datei manuell, also via FTP, löscht.
Diese Datei mit ihrem Zeitstempel führt einen zu einer weiteren Möglichkeit. Diese Datei kann man nämlich auch selbst erstellen und hochladen. In dieser Datei notiert man dann entweder <?php $upgrading = time(); ?>
, damit hört der Wartungsmodus nie auf oder man gibt eine Zeit an. Diese allerdings als UNIX-Zeitstempel. Um diesen zu erhalten nutzt man am besten eines der entsprechenden Angebote im Netz.
Im Code wird dann time() mit dem ermittelten Zeitstempel ersetzt, also z. B. <?php $upgrading = 1345650720; ?>
Möchte man also, dass der Wartungsmodus um 18:00 Uhr endet muss man als Uhrzeit 17:50 Uhr angeben. Minus 10 Minuten deswegen, weil die Variable $upgrading die oben erwähnten 10 Minuten enthält.
Diese bei Sivel.net gefundene Lösung lässt sich natürlich noch “verfeinern”.
Möchte man nämlich nur nicht eingeloggte Nutzer “ausschließen” kann man in die .maintenance-Datei folgenden Inhalt (auch gefunden bei Sivel.net) einfügen:
<?php
function is_user_logged_in() {
$loggedin = false;
foreach ( (array) $_COOKIE as $cookie => $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();
?>
Und wenn man dann noch eine eigene Meldung ausgeben soll anstatt der Standardmeldung über den Wartungsmodus (s.o.) muss man sich nur noch eine maintenance.php-Datei erstellen und mit dem gewünschten Inhalt füllen. Diese Datei muss in den wp-content-Ordner hochgeladen werden und man sollte bedenken, dass man keine WordPress-Funktionen verwenden kann.
Ein einfaches Beispiel gibt es erneut bei Sivel.net:
<?php
$protocol = $_SERVER["SERVER_PROTOCOL"];
if ( 'HTTP/1.1' != $protocol && '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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Maintenance</title>
</head>
<body>
<h1>Briefly unavailable for scheduled maintenance. Check back in a minute.</h1>
</body>
</html>
<?php die(); ?>
Weitere “hübsche” Beispiele gibt es auch bei Aliso the Geek oder Kevin Leary. Bei diesen Beispielen kann man allerdings die Zeitangabe im Header weglassen, da die ja schon in der .maintenance-Datei steht.
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
Ich nehme dafür immer das Plugin von Frank.
Danke, Vladimir!
Von der 10-Minuten-Regelung wusste ich noch gar nix, hab die Datei immer höchst persönlich gekillt, wenn mal was schief ging.
Die Ergänzung um die Internet-Zeit bietet ja tatsächlich die Möglichkeit, um so-und-so-viel-Uhr wieder „zurück“ zu sein 🙂
Vor zwei Jahren hatte ich mal eine solche Idee für ein ganz bestimmtes Projekt.
Werde jetzt meinen alten Gedanken wieder rauskramen müssen.
Lieber Gruß
Rata
8)
Danke für die Infos. Mir war zwar bewusst, daß man die Datei auch manuell erstellen kann, kannte aber bisher nicht die zusätzlichen Möglichkeiten einer nicht leeren Datei.
Auch ich danke ganz herzlich für den Tipp. Bisher habe ich nämlich auch nur Plugin von Frank gekannt. Wenn WordPress das aber von hause aus auch kann, dann brauche ich dieses natürlich nicht mehr.
Ich habe mir darin noch mit einem Stück Java-Script eine kleine Twitterintegration für aktuellere und schnellere Hinweise hinzugefügt.
Ist es auch möglich, mit dieser Methode bestimmte URLs auszuschließen, sodass einzelne Seiten trotzdem erreichbar bleiben?
[…] solche Situationen kann man sich selbst eine .maintenance erstellen und einen Zeitrahmen angeben oder man greift auf ein Plugin das eine Wartungsseite zeigt […]