WordPress バージョンアップ後ログイン時に「データベースの更新が必要です」

WordPress バージョンアップ後、管理画面にログインしようとしたら「データベースの更新が必要です」の画面が表示されたときの対応方法

原因を調べてみる

このままではログインできないので原因を調べてみました。

そもそもなぜ「データベースの更新が必要です」というメッセージが表示されるのかというと、WordPressのファイルで定義されているデータベースバージョン値と、DBに入っているデータベースバージョン値が異なるからです。
WordPressのアップデートをおこなうと、(データベースのバージョンが上がる場合)まずはファイルで管理されているデータベースバージョン値(/wp-includes/version.php内に記載)が更新されます。
その後、ログイン画面を開いた際に、ファイルの値とDBに保存されている値(wp_postmetaテーブルにmeta_key「db_version」として保存されています)を比較して差分があればWordPressは「データベースの更新が必要だ!」と認識してメッセージを表示します

「データベースの更新が必要です」無限ループを解決|WordPressエラー復旧事例 (tsukuriba.co.jp)

具体的にどうするか

違うなら同じにすりゃあいいじゃん!ってことになりますが、じゃあ具体的にどうするか?

  1. version.phpの値を現在のデータベースの値(56657)に書き換えてアップロードする。
  2. 現在のデータベースの値を書き換える。(56657)から(57155)に。
  3. WordPressのバージョンを前のバージョンに戻す。(6.5を6.4.3にダウン)

上記を思いつきましたが、どれも実用的な方法とはいえません。

  1. WordPressの更新の度に書き換えたversion.phpをアップロードしなくてはならない。
  2. データベースを自身で書き換えるのは(データベースを)壊してしまうリスクがあり危険すぎる。
  3. 前のバージョンに戻しても自動更新機能で更新されるのでEasy Updates Managerなどのプラグインで管理が必要。

つまり、WordPressにデータベースを更新させればよいわけで、むしろ着目すべき点は「MySQL 5.5.5以上」が必要だと表示される点にあります。データベースバージョン値 (57155)はそのままに、MySQLバージョン値を下げて書き換えたversion.phpをアップロードしてあげれば、「データベースの更新が必要です」の画面が表示されても「WordPressデータベースを更新」ボタンを押せばデータベースが更新されてログイン画面が表示されます。

/**
 * Holds the required MySQL version.
 *
 * @global string $required_mysql_version
 */
$required_mysql_version = '5.5.5';

上記を

/**
 * Holds the required MySQL version.
 *
 * @global string $required_mysql_version
 */
$required_mysql_version = '5.0';

に書き換えたversion.phpをアップロードしてあげます。

データベースバージョン値が更新されたのを確認できます。書き換えたversion.phpをアップロードするというひと手間がありますが、最もリスクが低い方法だと思いますがいかがでしょうか。

サブディレクトリのWordPressをドメイン直下のルートディレクトリで公開

サブディレクトリのWordPressをドメイン直下のルートディレクトリで公開する方法

作業前の公開URL https://example.com/wp
作業後の公開URL https://example.com
作業行程
1. WordPressの管理画面でサイトアドレスを変更する
設定 > 一般設定 内の「サイトアドレス(URL)」の /wp を削除し、[変更を保存] をクリックします。
注意:「 WordPressアドレス(URL)」は変更しないで下さい。

変更前
URL https://example.com/wp

変更後
URL https://example.com

2.パーマリンク設定を保存する
設定 > パーマリンク へ移動し、何も変更せずに[変更を保存] をクリックします。
この操作で、 WordPressに更新を伝えます。

3.ファイルの複製
FTPで、 インストールディレクトリにある index.php と .htaccess を、ルートディレクトリにコピーします。
注意:移動ではなくコピーを行います。

4.コピーした index.php を編集する
ルートディレクトリにコピーした index.php を編集します。
WordPressが インストールされているサブディレクトリのパス(今回は / wp )を追加します。

インストールした環境や状況によって下の2通りのどちらかで書かれていると思います。

// __DIR__ の場合

//編集前
require __DIR__ . ‘/wp-blog-header.php’;

//編集後 ( /wpを追加 )
require __DIR__ . ‘/wp/wp-blog-header.php’;

// ( dirname( __FILE__ ) の場合

//編集前
require( dirname( __FILE__ ) . ‘/wp-blog-header.php’ );

//編集後 ( /wpを追加 )
require( dirname( __FILE__ ) . ‘/wp/wp-blog-header.php’ );

5.コピーした .htaccess を編集する
RewriteBase と RewriteRule の2箇所を編集します。
index.phpと.htaccessの記述を変更することで参照先を変更しています。

# 編集前

RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# ↓変更箇所
RewriteBase /wp/
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# ↓変更箇所
RewriteRule . /wp/index.php [L]

# 編集後

RewriteEngine On
RewriteRule .* – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# ↓変更箇所
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# ↓変更箇所
RewriteRule . /index.php [L]

6.URLが変更されたことを確認する
ドメイン直下のURLでアクセスできていたら成功です。

作業前の公開URL https://example.com/ wp
作業後の公開URL https://example.com