Своё сообщение при ошибке Error establishing a database connection в WordPress
Рад видеть!
Отлично, когда сайт работает исправно и никаких ошибок не возникает. Однако так бывает не всегда. Если вы пользуетесь услугами хостинга или даже выделенного сервера, то всё равно в пик нагрузки сайт сможет перестать выполнять свои обязанности, демонстрируя достаточно сухое сообщение «Error establishing a database connection».
Данная ошибка возникает, если потерян доступ к базе данных. Зачастую это связанно с тем, что к базе осуществляется слишком много запросов и оная уже не в состоянии работать должным образом. Но самый негативный эффект в сообщении, которое показывается посетителям, пытающимся увидеть интересующий их контент при заходе на ваш сайт.
Ошибка о потере доступа к базе данных пользователям ничего не говорит. Мало кто попробует перезагрузить страницу, перейти на главную страницу сайта, ведь потеря доступа к базе данных может быть весьма кратковременной. Большинство посетителей, увидев такое ни о чём не говорящее сообщение на английском языке, просто закроет вкладку и уйдёт искать интересующую информацию на других ресурсах. И это, согласитесь, весьма неприятно.
Было бы замечательно, если можно было бы за место этого сухого текста вывести страницу с информацией, а ещё осуществлялась бы попытка всё-таки отобразить запрашиваемый контент. И в WordPress такая возможность существует.
Выводим свою страницу в WordPress при ошибке Error establishing a database connection custom
- Для этого потребуется создать файл под именем db-error.php в любом редакторе (к примеру, Notepad++).
- Теперь в него необходимо вписать содержание, что будет выводиться при появлении ошибки. Вот типовой код:
<?php $page = $_SERVER["REQUEST_URI"]; $sec = "5"; header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header("Refresh: $sec; url=$page"); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="content-language" content="ru-ru"> <meta name="robots" content="noindex,follow" /> <meta name="viewport" content="width=device-width" /> <title>Ошибка 503 - Service Unavailable</title> <style type="text/css"> body { background-color:#fff; } #msg { font-family:arial, verdana, sans-serif; font-size:12pt; color:#444; font-weight:normal; } </style> </head> <body> <br><br> <div align="center"> <table><tr><td width="700px"> <div id="msg"> <h1>Кажется, что-то пошло не так...</h1> Либо у нас что-то не сработало, либо в данный момент сервер сильно перегружен.<br><br> Обновите страницу - вполне возможно, что проблема исчезнет.<br>Если Вы продолжаете видеть это сообщение, то напишите на<br> <a href="mailto:example@example">example@example</a>, и сообщите все подробности.<br><br> Пока что попробуйте открыть главную страницу нашего сайта, вдруг заработает...<br><br> <a href="https://example">Перейти на главную страницу сайта</a><br><br> </div> </td></tr></table> </div> </body> </html>
Вы, естественно, можете отредактировать его на своё усмотрение – указать, что проблема временная, куда написать, если отображается это сообщение и т.п. Можете добавить графическое содержание, стили и т.д.
Думаю, что необходимо пояснить назначение вот этой строки в коде:
header("Refresh: $sec; url=$page");
Если на хостинге или сервере возникли проблемы, и при этом посетитель попытался посмотреть интересующую его страницу на сайте, то ему будет выведено сообщение (которое вы сами зададите). Однако пока открыта данная страница, браузер каждые 5 секунд будет её обновлять, и если доступ к базе данных вернётся, то отобразится ровно та информация, за которой и пришёл пользователь. Это действительно полезная вещь, которая помогает «не потерять» посетителя, если он зашёл на ваш сайт в момент кратковременного сбоя соединения с базой данных.
- Сохранив файл db-error.php с вписанным содержанием, останется его только загрузить к другим файлам на хостинге\сервере. Его необходимо расположить в папке под именем wp-content.
- Всё, задача выполнена.
Как мы видим, достаточно просто решается вопрос с надлежащим информированием посетителей, если на сайте возникла проблема установления соединения с базой данных. И выводим контент, если проблема исчезла.