Passer WordPress en mode Maintenance

Un client venant de fermer son site (pour le rouvrir sous un autre nom bientôt), cela m’a poussé à me pencher sur le mode maintenance de WordPress.

Comment désactiver un site en quelques instants, pour une durée plus ou moins longue?

Et surtout, comment personnaliser cette page!

Solution via des plugins

Il existe de nombreux plugins qui permettent de passer en mode maintenance, avec des options intéressantes.

Pour cela, une recherche sur le dépôt des plugins ou dans Google vous permettra de trouver votre bonheur (et pour ce faire, vous n’avez pas besoin de moi).

Pratique.

L’avantage de ces plugins est que vous pourrez personnaliser quelques détails, mais l’inconvénient est que vous ne pourrez pas faire du sur mesure total.

Allons donc plus loin…

Solution brutale: on arrête tout

Cette solution est assez définitive, et convient assez bien à mon cas de figure: on ferme le site complètement, y compris l’administration, pour tout le monde.

Pour remplacer par une page sur mesure, statique.

Commencez par créer un fichier .maintenance à la racine du site. Attention, il n’a pas de nom, juste une extension. Ce fichier doit contenir:

<?php $upgrading = time(); ?>

Rien de plus. J’imagine que cela permet à WordPress de comptabiliser dans sa base la durée du mode…

Le résultat est un affichage standard:

Pour repasser en mode normal, renommez ou supprimez ce fichier.

Si vous voulez personnaliser l’apparence, créez maintenant dans le dossier wp-content un fichier nommé… maintenance.php.

Il doit contenir une structure de ce genre:

<?php
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
?><!doctype html>
<html>
<head>
     <meta charset="utf-8">
     <title>Maintenance</title>
     <link href="/wp-content/themes/richardcarlier/style.css" rel="stylesheet">
</head>
<body>
     <!-- ici, vous mettez votre html... -->
</body>
</html>
<?php die();

Pour sa partie PHP, les premières lignes sont destinées au référencement, pour éviter que votre site soit déclassé: on signale une interruption temporaire. La dernière ligne indique que toute exécution de script doit s’arrêter.

Pour le reste, c’est un fichier html statique, qui peut même utiliser les css de votre thème, à condition de bien préciser le chemin complet, depuis la racine du site, par exemple:

<link href="/wp-content/themes/richardcarlier/style.css" rel="stylesheet">

Pareil pour vos images, pensez au chemin complet:

<img src="/wp-content/themes/richardcarlier/img/logo.png" alt="">

En étant attentif sur ces chemins, tout est possible en personnalisation!

Solution pratique : les administrateurs continuent

L’idée est ici de permettre aux administrateurs de pouvoir accéder au site et à l’admin, mais d’empêcher les autres de le faire. Pratique en cas de changement de thème, pour que l’admin puisse voir ce qu’il fait (et être le seul).

Pour cette solution, pas de fichier .maintenance, mais un fichier maintenance.php (le même que tout à l’heure, avec les mêmes précautions de chemins).

Le bout de code ci dessous ira lui dans le fichier functions.php de votre thème.

function maintenance_sauf_admin() {
     if ( !current_user_can('administrator') ) {
          $isLogin = strpos($_SERVER['REQUEST_URI'], 'wp-login.php') ;
          if ($isLogin === false) {
               header("location: /wp-content/maintenance.php");
               die();
          }
     }
}
add_action('init', 'maintenance_sauf_admin');

Que fait-il? Il commence par vérifier si on est administrator. Si ce n’est pas le cas, on vérifie que l’on est pas sur la page pour se connecter… et si ce n’est toujours pas le cas, on est rediriger vers la page maintenance…

Il ne devrait pas être compliqué d’adapter ce petit bout de code en un plugin sur mesure, le rendant indépendant du thème que l’on utilise. En activant le plugin, on passe en maintenance…

Mais ceci est une autre histoire.

Laisser une réponse