WordPress5.3からメンテナンス中のページのカスタマイズがかんたんになりました。
理由は『wp_die()の機能強化』です。これによって、コードが直感的でHTMLも見やすくなりました。
優先度は低いですが、あまり見られないページに力を入れてるとサイトのクオリティが高いと思われます。
(見た目だけのカッコつけだけど。)
DBエラーページ(db-error.php)、PHPエラーページ(php-error.php)の作り方と、ほぼほぼ同じです。
(だから書いてある内容もほぼ同じ。)
WP5.3から、wp_die()で指定するパラメータのメッセージ(第1パラメータ)にHTMLタグが使えるようになりました。
(ようはHTML文が挿入できる。)
これで、ドロップインで作成するメンテナンス中の専用ページがスッキリと余計なことを考えずに作成できます。
HTMLは<body>部だけでいいです。
(CSSスタイル、JavaScriptも挿入可)
作成するサンプル
まずはWP5.3以降のデフォルトページとカスタマイズしたページをお見せします。
大したことはしていません。HTMLとCSSを数分で書いただけです。それでそれなりのものができます。
ということで実際に作ってみましょう。
maintenance.phpのフォーマット
メンテナンスページは/wp-content/maintenance.phpです。説明はあとにしてまずはフォーマットから。
<?php
if ( ! function_exists( 'wp_die' ) ) {
require_once( ABSPATH . WPINC . '/functions.php' );
}
wp_load_translations_early();
header( 'Retry-After: 600' );
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(), __( 'Maintenance' ), 503 );
このかたちでページを作成します。
PHPコードはなんでこうなるのか?
PHPコードは
maintenance.phpが無いとき、どうやってデフォルトページを作っているか?
を考えて、その部分のWordPressのコードからパクってきました。
(『maintenance.php』でWPコードを検索。)
if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) {
require_once WP_CONTENT_DIR . '/maintenance.php';
die();
}
require_once ABSPATH . WPINC . '/functions.php';
wp_load_translations_early();
header( 'Retry-After: 600' );
wp_die(
__( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ),
__( 'Maintenance' ),
503
);
なんでfunctions.phpをrequireするのか?
wp_load_translations_early()を入れる理由は?
HTTPレスポンスヘッダに'Retry-After: 600'を入れる理由は?
なんで503コードなの?
これらのすべての答えは
以上です。
補足
不親切なのでちょっとだけ補足すると、503コードは『サービスが利用できない』という意味で、600コードは503と一緒につけるのがルールです。
HTTP通信規約の話は本題ではないのでこのへんで。
functions.phpの中にはwp_die()が定義されています。これがないと使えません。
wp_load_translations_early()は翻訳ファイルを通常より早いタイミングで読み込むもので、WPのコア機能だけで使います。
(テーマやプラグインでは使わない。)
これからも、ドロップインではWordPress本体をカスタマイズしていることが分かります。
WordPress.orgリファレンス
メンテナンスページのカスタマイズのまとめ
- maintenance.phpファイルを用意する。
- wp-includes/load.phpのwp_maintenance()を参考にフォーマット作成。
- HTML文の部分をカスタマイズ。
- "***/DocumentRoot/wp-content/"にアップロード。
WP5.2までのカスタマイズはこれよりも作業が必要です。
- HTTPレスポンスヘッダを詳細に作らないといけない。
- HTMLを<html>から作らないといけない。
- wp_die()は使わない。(maintenance.phpファイルの呼び出し元のdie()で終わる。)