PHP7.4から8.xにアップデートしたさいに起きたエラーは「query_posts関数」が原因でした

この記事は約5分で読めます。

PHP7.4から8.xにアップデートかなり古いバージョンのワードプレス(WordPress)サイトをアップデートするお手伝いをしました。ワードプレスのバージョンが4.6、MySQLが5.5、PHPが7.4という仕様でした。サポート期限が過ぎているやつばかりです。(笑)これらをエラーチェックしながらアップデートするのはなかなか骨の折れる業務です。
今回は、レンタルサーバーを移転することで、システム関係すべてを最新版にするという荒業で実施しました。これまで利用していたのが、さくらインターネットで移転先サーバーがエックスサーバーです。

さくらインターネットからエックスサーバーに移転

新しいサーバーですと最初から最新の環境なのがよい点です。

現状サーバー  エックスサーバー
・WordPress4.6 → WordPress6.2
・MySQL5.5 → MariaDB10.5
・PHP7.4 → PHP8.0.25

となります。

今回は、「さくらインターネット」から「エックスサーバー」への移転になりました。ただしこれは、さくらインターネットが悪いという意味ではなくて、長年アップデートしてこなかったことによる環境が古すぎて、いっそサーバー移転したほうが手っ取り早く最新環境にできる、ということです。

シンプルなワードプレスは簡単移転サービスで処理できました

ワードプレスは簡単移転処理のメニューがあるので、バージョンが古くてもだいたいスムーズに移転できます。今回の案件には複数のワードプレスが入っていて、ほとんどこの簡単移転サービスでうまくいきました。

ただ、メインのサイトだけはデザイナーさんのカスタマイズがかなりしてあり、なかなかやっかいでした。通常の簡単移転サービスのメニューではエラーになりうまくいきませんでした。ワードプレスのバージョンが4.6と古すぎることも原因かもしれません。

カスタマイズされたワードプレスはマイグレーションを使って移転しました

そこで「All-in-One WP Migration(オールインワンWPマイグレーション)」というプラグインを使ってみました。

WordPressをサーバー移転するためにの便利なバックアップ用プラグインには「All-in-One WP Migration」がおすすめです
WordPressのサーバー移転を簡単に行うためのプラグインを調べています。 エックスサーバーでは「WordPress簡単移行」というメニューがあり、実際に使ってみたら驚くほど簡単に移転できました。後で確認すると、移転元にも移転先にもWordPressには「Xserver Migrator」というプラグインが入っていて、このプラグインがエックスサーバー専用のサーバー移転プラグインとして機能していま...

これを使ったところ、うまく記事の移転ができました。本当に優秀なプラグインですね。

残されたエラーの処理がたいへんでした

さて、ここからが移転作業の本番です。

デザイナーさんがカスタマイズした仕様がなかなか特殊な作り方で理解するのが大変でした。カスタムフィールドのエラー表示があったので該当するカスタムフィールドプラグインを一旦停止しました。またトップページなど表示する主要ページは、PHPファイルの中にワードプレスの記事を読み込む関数が多数入っていました。

しかも、その関数がエラーを起こしています。こんなエラー表示がされていました。

Warning: Undefined variable $additional_loop in /home/xs******/xs******.xsrv.jp/public_html/****/wp-content/themes/nicotto/date.php on line 29

新BINGのChatGPTに回答をもらいました

このエラー表示を新BINGのChatGPTにて調べてみました。

幻想的な川霧が湧く峡谷
フランス南東部のプロヴァンス地方にあるヴェルドン峡谷は、およそ 25km にわたって続くヨーロッパ最
AIの回答
AIの回答

query_posts関数はPHPのバージョン8.0で非推奨になりました。そのため、PHPのバージョンが7.4から8.0にアップグレードされた場合、query_posts関数がエラーを引き起こす可能性があります。WordPressでは、query_posts関数の代わりにWP_Queryクラスを使用することを推奨しています。

どもども遠田
どもども遠田

PHP7.4で表示していた
<?php query_posts($query_string . ‘post_type=post&posts_per_page=10&paged=’.$paged); ?>
をPHP8.0にするにはどのように書き直せばいいですか?

その回答が以下のとおりでした。

このエラー原因はPHP7.4に依存した関数だったらしく、PHP8.xだと動かないことが判明。そして、その解決策を表示してくれるのがにくいです。このコードに書き換えればよいということです。

<?php $paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
$args = array(
‘post_type’ => ‘post’,
‘posts_per_page’ => 10,
‘paged’ => $paged
);
$query = new WP_Query($args); ?>

PHPの記述は、開始時に「<?php 」と終了時に「 ?>」が必要なので、その分はコピペで足しました。

また、もうひとつのエラーに関しても適切な回答を得ることができました。

示されたコードはこれです。

<div class=”nav-previous”><?php previous_post_link(); ?></div>
<div class=”nav-next”><?php next_post_link(); ?></div>

これには驚きました。

このコードを該当部分にコピペで貼り付けたところ、無事に問題解決できました。

ChatGPTは本当にすごいですね。PHPのコード記述については知らない私でもエラー改善をすることができました。

無事にサーバー移転ができました

新BINGのヘルプのおかげもあり、無事にサーバー移転ができました。いやーすごく助かりました。

やはりエックスサーバーにすると表示がサクサクと早いです。企業がWordPressでサイト運用をするのなら、今はエックスサーバー推しになりますね。

【広告】
エックスサーバーはWordPressが早い
https://www.xserver.ne.jp/

新規契約でもサーバー移転でも、エックスサーバーに興味があれば上記のリンクから仕様をご覧になってみてください。

新規契約でもサーバー移転でも、エックスサーバーに興味があれば上記のリンクから仕様をご覧になってみてください。

上記のリンクからそのまま契約までいくと、今なら5000円のキャッシュバックがあるようです。(年払いの場合、キャッシュバックなどの特典は時期により内容が変わります。特典内容はこちらをご覧ください)
なお、私にもなんらかの特典があるようなので、契約するときのリンクはぜひ上記のバナーからおねがいします(笑)