Je ne connais pas beaucoup le fonctionnement du super cache, mais je vois au moins que je peux trouver la plupart des pages de mon site dans le dossier wp-content/cache/supercache. Maintenant, si WordPress ne peut pas se connecter à la base de données en raison d’une panne du serveur MySQL (comme c’est le cas actuellement), doit-il afficher un message d’erreur ou doit-il afficher les pages mises en cache?
Je pense que cela devrait fonctionner, que la connexion soit établie ou non. Existe-t-il une option ou un drapeau qui me manque?
En outre, il semble que la page principale du site ne soit pas en cache, alors que tout le reste. Y a-t-il un moyen de régler ce problème? Évidemment, je ne peux rien y faire pour le moment, car la base de données est en panne, mais pour l’avenir?
Voici une réponse à votre deuxième question: "En outre, il semble que la page principale du site ne soit pas mise en cache, contrairement à tout le reste. Y a-t-il un moyen de gérer cela?"
Dans votre backend, allez dans Paramètres -> WP Super Cache et sélectionnez le Avancé onglet. Recherchez la section intitulée Noms de fichiers acceptés et URI rejetés . Si Front Page (is_front_page)
ou Home (is_home)
est coché, décochez-la, puis cliquez sur le bouton Save
. Cela devrait permettre à la page d'accueil de votre site d'être mise en cache.
NB: Cela suppose que vous utilisiez le plugin WP Super Cache, que je récupère à partir des balises de la question.
(Je n'ai pas testé cela, cependant, votre kilométrage peut varier.)
Étant donné que vous avez déjà une version en cache de votre site, je peux ignorer la partie qui explique comment la configurer et passer à la tâche la plus simple, la PHP!
Vous souhaitez insérer la fonction mysql_ping()
en haut à droite de votre fichier header.php dans votre thème actuel (ou thème enfant, de préférence). Ça devrait ressembler a quelque chose comme ca:
<?php set_time_limit(0);
$conn = mysql_connect('localhost', 'mysqluser', 'mypass');
$db = mysql_select_db('mydb');
/* Assuming this query will take a long time */
$result = mysql_query($sql);
if (!$result) {
echo 'Query #1 failed, exiting.';
exit;
}
/* If nothing still, take the user to the cache */
if (!mysql_ping($conn)) {
header( 'Location: http://www.yoursite.com/new_page.html' )};
} ?>
Parce que la fonction header
est là, vous voulez vous assurer que cela apparaît avant toute autre chose, y compris une balise <html>
ou <body>
.