WordPress Snippet

ワードプレスをカスタマイズしよう

データベースエラーとドロップイン

WordPress3.0になってから、データベースエラーが発生した時の、カスタムメッセージを表示するための、drop-in(s) が動作しなくなっています。

ドロップインによるDBエラーのカスタムメッセージ

drop-in(s)を使っている場合は、プラグインページの「ドロップイン」の項目に表示されます(マルチサイトでは表示されません)

データベースエラー用のカスタムメッセージは、

wp-contentディレクトリに、メッセージをhtml形式で記述したファイルをdb-error.phpという名前で保存すると機能ししていました。

サンプルコード

<?php
header( 'HTTP/1.1 503 Service Unavailable' );
header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
header( 'Pragma: no-cache' );
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" dir="ltr" lang="ja">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>データベースエラー</title>
	<link rel="stylesheet" href="/errors/style.css" type="text/css" />
</head>
<body id="error-page">
	<h1>503 Service Unavailable - DB Error</h1>
	<p>ただいまサーバのデータベースに接続できないようです。<br />
	数分後に再度リロードしてみてください。</p>
	<p>ご不便おかけしますが、よろしくお願いいたします。</p>

</body>
</html>

しかし、最新のWordPress( 日本語 )では、常に以下のようなメッセージが表示される状態にあります。

データベース接続確立のエラー

これは wp-config.php ファイルのユーザー名とパスワードが間違っているか、localhost のデータベースサーバーに接続できないかのどちらかを意味します。ホストのデータベースサーバーがダウンしているのかもしれません。

  • ユーザー名とパスワードに間違いはありませんか ?
  • ホスト名に間違いはありませんか ?
  • データベースサーバーは動いていますか ?

上記の用語の意味が分からない場合は、サーバーの管理者にお問い合わせください。ヘルプが必要であれば WordPress 日本語フォーラム または WordPress サポートフォーラム (英語) へどうぞ。

負荷が高くなって、データベースエラーが出ることもあり、ワードプレスのフォーラムに連絡しろといわれても、解決が出来ません。

WordPress3.4で、一時凌ぎの、コア改変による、ドロップインを有効にする方法をメモに残します。(マルチサイトでは、動作確認していません)

wp-includes/load.php line:668

function wp_load_translations_early() {
	global $text_direction, $wp_locale;

を、以下のように変更します。

function wp_load_translations_early() {
	global $text_direction, $wp_locale, $wpdb;
	dead_db();

global変数 $wpdbを追加して dead_db()を追加します。

関連リンク

https://core.trac.wordpress.org/ticket/16990

Memo

wp-includes/wp-db.php

db_connect()

[emulsion_relate_posts]