Cuando WordPress no puede acceder a la base de datos muestra una página informando del error... una página cutre y ya demasiado vista.
Si le dedicamos horas a personalizar nuestro tema ¿Por qué no hacerlo con la página de error en la base de datos?. De seguro que alguna vez la tendrán que ver tus usuarios.
Las instrucciones están basadas en un artículo de All Forces aunque realmente no tiene ningún misterio y lo he ampliado bastante.
Creando una página de error personalizada
Aunque podríamos incrustar la página en el fichero wp-db.php
, si
actualizamos WordPress y nos olvidamos habremos perdido el tiempo
inútilmente. Por ello recomiendo crear en la ruta de nuestra plantilla
un fichero db-error.php
. Para ello debemos tener en cuenta lo
siguiente:
-
No podemos usar funciones de WordPress. Cuando aparece el error, no podemos usar funciones de WordPress especialmente aquellas que requieren de acceso a la base de datos (obvio, no tenemos acceso).
-
Necesitamos una página estática. Debemos adaptar la plantilla o crear un fichero HTML de forma estática: el nombre, descripción y todo aquello que se genera de forma dinámica debe ponerse en HTML a mano (o no ponerse).
-
Pero podemos seguir usando PHP. Lo que no podemos es usar funciones de WordPress o que requieran MySQL, pero a modo de resumen todo lo que sea programado manualmente en el propio fichero y no acceda a MySQL se puede usar.
-
Es una buena idea enviar una cabecera HTTP 503. La cabecera
HTTP 503 Service Unavailable
es una cabecera que indica que en ese momento debido a problemas de red o del servidor el servicio no está disponible.
Algunos programas (o buscadores...) aprovechan esta cabecera para informar o para dejar de hacer ciertas tareas. En principio con la cabecera 503 se debería acabar que coincida una caída con que el googlebot pasa por la web y encontrarte que te ha indexado la página de error en la base de datos.
Una vez que tengamos la página, le ponemos al principio del todo un:
<?php header('HTTP/1.0 503 Service Unavailable'); ?>
Y ya la tenemos lista, solamente falta hacer el hack al WordPress.
Modificando WordPress
El fichero a tocar es el wp-includes/wp-db.php
, casi al final se ve
una función llamada "ball". Lo mejor es buscar en el código por "Justs
wraps errors". Dentro de la propia función tiene la página de error
BBDD yo lo que hago es borrarla dejándola así:
function bail($message) { // Just wraps errors in a nice header and footer /* Custom Error page hack */ include(ABSPATH . 'wp-content/themes/tu-tema/db-error.php'); $error = ( !$this->show_errors ) ? '' : $this->show_errors; die(); }
Solamente tenéis que cambiar la ruta para que "tu-tema" sea el nombre del directorio que alberga vuestra plantilla y el fichero db-error.php.
Probando que funciona...
La mejor forma de probar si funciona es provocar un error en la
BBDD, para ello podemos cambiar el nombre de la base de datos en el
fichero wp-config.php
por otro "un momento" y luego restaurarlo.
Además, si usáis WP-Cache, las páginas cacheadas seguirán enviándose y no se vera el error por lo que podremos entrar en el Dashboard (el cual nunca es cacheado) y ver el fallo medio tranquilos.
Ahora veamos quien es el primero en ver la de SigT ;-).
Actualización. Tenemos un ganador (en los comentarios).: Javier Aroche ha sido el primero en avisar que ha podido verla. Con captura incluida que paso a guardar:
Por si algún día fallase (o cerrasen) FlickR.
Comentarios