ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

WordPress, データベースのエラーページをカスタマイズする

wordpress image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

WordPress5.3からデータベース・エラーページのカスタマイズがかんたんになりました。

理由は『wp_die()の機能強化』です。

メンテナンス中ページ(maintenance.php)、PHPエラーページ(php-error.php)の作り方と、ほぼほぼ同じです。

(だから書いてある内容もほぼ同じ。)

WP5.3から、wp_die()で指定するパラメータのメッセージ(第1パラメータ)にHTMLタグが使えるようになりました。

(ようはHTML文が挿入できる。)

これで、ドロップインで作成するDBエラーの専用ページがスッキリと余計なことを考えずに作成できます。

HTMLは<body>部だけでいいです。

(CSSスタイル、JavaScriptも挿入可)

作成するサンプル

まずはWP5.3以降のデフォルトページとカスタマイズしたページをお見せします。

なにがイヤって、この文言がサイトの閲覧者にも表示されること。内容はどうみても管理者・開発者向けです。

WordPressで作ってるのが見えるし。ふつう、意図しない限りシステムを何で作っているかを公開することはありません。

大したことはしていません。HTMLとCSSを数分で書いただけです。それでそれなりのものができます。

ということで実際に作ってみましょう。

db-error.phpのフォーマット

DBエラーページは/wp-content/db-error.phpです。説明はあとにしてまずはフォーマットから。

<?php
if ( ! function_exists( 'wp_die' ) ) {
    require_once( ABSPATH . WPINC . '/functions.php' );
}
ob_start();
?>
<!-- CSSファイル -->
<link rel="stylesheet" href="https://sample.com/sample.css" >
<style type='text/css'>
  // ここにインラインスタイルを書く。
</style>

// ここにHTMLを書く。

<!-- JS -->
<script></script>
<?php
wp_die( ob_get_clean(), __( 'Database Error' ) );

このかたちでページを作成します。

PHPコードはなんでこうなるのか?

PHPコードは

db-error.phpが無いとき、どうやってデフォルトページを作っているか?

を考えて、その部分のWordPressのコードからパクってきました。

(『db-error.php』でWPコードを検索。)

/wp-includes/functions.php, dead_db()
wp_load_translations_early();

// Load custom DB error template, if present.
if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
    require_once WP_CONTENT_DIR . '/db-error.php';
    die();
}

// If installing or in the admin, provide the verbose message.
if ( wp_installing() || defined( 'WP_ADMIN' ) ) {
    wp_die( $wpdb->error );
}

// Otherwise, be terse.
wp_die( '<h1>' . __( 'Error establishing a database connection' ) . '</h1>', __( 'Database Error' ) );
/wp-includes/wp-db.php, wpdb->db_connect()
wp_load_translations_early();

// Load custom DB error template, if present.
if ( file_exists( WP_CONTENT_DIR . '/db-error.php' ) ) {
    require_once WP_CONTENT_DIR . '/db-error.php';
    die();
}

$message = '<h1>' . __( 'Error establishing a database connection' ) . "</h1>\n";

// 省略。

$this->bail( $message, 'db_connect_fail' );
/wp-includes/wp-db.php, wpdb->bail()
if ( $this->show_errors ) {

    // 省略。

    wp_die( $message );
} else {

    // 省略。

    return false;
}

db-error.phpが無いときの処理は、HTML文を作ってwp_die()を実行しているだけです。

functions.phpのrequireはいる?

functions.phpのrequireはいらないっちゃいらないです。WPソースを見ても分かるように、db-error.phpをコールするときはfunctions.phpはrequire済みです。

(wp_die()が使える状態。)

今回は、一応保険のために付けました。

wp_load_translations_early()を入れなくていいのか?

メンテナンス中ページを作成した人は気になるところですが、DBエラーページではwp_load_translations_early()は不要です。

WPソースを見れば分かるように、db-error.phpをコールする直前で読み込み済みなので。

header( 'Retry-After: 600' );はいる?

メンテナンス中ページを作成した人はもうひとつ気になると思います。HTTPレスポンスヘッダの『Retry-After:600』です。

DBエラーではレスポンスコード500を返します。500のときは600を付けなくてもいいです。

(メンテナンスは503。)

DBエラーページのカスタマイズまとめ

  • db-error.phpファイルを用意する。
  • /wp-includes/functions.phpのdead_db()を参考にフォーマット作成。
  • HTML文の部分をカスタマイズ。
  • "***/DocumentRoot/wp-content/"にアップロード。

WP5.2までのカスタマイズはこれよりも作業が必要です。

  • HTTPレスポンスヘッダを詳細に作らないといけない。
  • HTMLを<html>から作らないといけない。
  • wp_die()は使わない。(db-error.phpファイルの呼び出し元のdie()で終わる。)

作り方はmaintenance.phpを参考。

前の投稿
WordPress メンテナンス中ページをカスタマイズする
WordPress, PHP Fatalエラーページをカスタマイズする
次の投稿

WordPressの本

post-cta-image

たくさんあるなかで、WordPressの基本が学べる、目的別に学べる本を選びました。

  • WordPressの基本。
  • Webサイト作成から運用まで全体的に学ぶ。
  • かんたんなカスタマイズを学ぶ。
  • 何も分からないところから学ぶ。
  • WordPressからPHPプログラミングを学ぶ。

の5冊です。どうしてもネット上で調べて勉強するのが苦手という人におすすめです。

この内容をモノにすればほかの本は必要ありません。あとは自分の力で、書籍を使わずにインターネット上にある情報だけで学んでいけます。

コメントを残す

*