PHP8にアップデートしたらWordPressがエラーになって直した話

PHP7.3や5.6からPHP8にバージョンアップしたら、wordpressにエラーが出たので、対処方法を備忘までに記録しておきます。

広告

事の発端

先日、複数のクライアントから「レンタルサーバーの業者からPHPをバージョン8以上にアップデートするよと通知があったけど、ウチのサイトは大丈夫?」との連絡が入りました。

それで、試しにテストサーバー上で、PHP8にバージョンを上げてみて、アクセスしたら、こんな感じ。

見事にエラーが出ました。

PHP5.6からアプデした方は、一般ユーザー向けのページ全てと、管理画面もエラーになりました。

PHP7.4からアプデした方は、一般ユーザー向けのページ全てがエラー

エラーの原因

直接的な原因はwordpressのバージョン不足。
調べたところ、wordpressの5.5以下のバージョンはPHP8には未対応。故にエラーになると判断できました。

参考↓

ワードプレステーマTCD

長期で運営しているWordPressのサイトで、以下のような問題が発生していませんか? 表示速度が遅くなった気がする …

対象方法

対象方法はズバリ、wordpressのアップデートです。

wordpressの(手動)アップデートに関しては別の記事で触れていますので、そちらをご参照下さい(自動アップデートは怖くてやった事ないです。汗。)

関連記事

WordPressのバージョンアップを手動でやる方法を備忘までにメモ。 WordPressのバージョンアップはそんなに頻繁にやる訳ではないけども、「PHPをアップデートしたらWordPress動かなくなった!」とか結構、緊急性が高い場[…]

WordPressをアップデートしてもエラーになる場合

wordpressをアップデートしても、他の要因により、エラーになる場合があります。

それは、大体下記の通り。

  • プラグインがPHP8に対応していない
  • テーマがPHP8に対応していない

プラグインがPHP8に対応していない場合の対処

プラグインがPHP8に対応していない場合は、一旦全てのプラグインを停止あるいは読み込めない状態にします。

WordPress管理画面にログインできる場合

管理画面にログインできる場合は、管理画面の[プラグイン]から一つずつ、プラグインを停止して、都度エラーが除去されたかどうか確認します。

 

WordPress管理画面にログインできない場合

そもそも管理画面にログインできない状態になった場合は、FTPにログインして、直接プラグインのフォルダ名を一時的に変更してしまいます。

WordPressをインストールしたURLから[wp-content] > [plugin]と辿ると、プラグインのフォルダが確認できます。このフォルダ名を一つずつ名前を変えると、プラグインが強制的に停止状態になります。

 

エラーの原因になるプラグインが特定できたら

エラーの要因になるプラグインが特定できたら、プラグインの更新版がPHP8に対応しているか確認します。プラグインの更新でエラーが対処されている場合もありますが、古いプラグインの場合は更新が停止している場合もありますので、その場合は代替のプラグインを探す必要があります。

 

テーマがPHP8に対応していない場合の対処

テーマが配布されている(自作テーマではない)場合

テーマがPHP8に対応していない場合は、利用しているテーマがPHP8に対応しているか、配布元に確認します。有料テーマの場合は、PHP8に対応されている場合が多いので、テーマをバージョンアップすることでPHP8に対応できるかと思います。

テーマが自作テーマの場合

私もまさに自作テーマを作成していて、この場合に該当しました。この場合は、テーマのどこにエラーがあるのか、確認していきます。エラーを発見する手段としては、PHPのエラーを見えるようにする必要があります。やり方は色々あるのですが、長くなるのでこの記事では割愛します。汗

「PHP エラー 表示」あたりで検索すると色々出てきます。その他、利用しているレンタルサーバーに応じてやり方が異なるので、例えば、私も利用しているエックスサーバーであれば、「エックスサーバー  PHP エラー 表示」という感じで、レンタルサーバーの名称を入れるとマッチする可能性が高くなります。

結果的に私の場合はfunctions.phpにエラーがあり、これを修正したら、動くようになりました。エラーの対象だったのは、こんな記載。

if( $query->query_vars[post_type] == 'hogehoge' )

で、修正後は…

if( $query->query_vars['post_type'] == 'hogehoge' )

違い…分かりますかねぇ。汗
「query_vars」の配列のところ「post_type」両脇の「’(クォーテーション)」が無かったのです…

これがPHP7.4では動いていたのですが、PHP8ではエラーになったという事でした!意外に細かいところもPHP8ではエラーになったりするんですね…勉強になりました。

今回の記事は以上になります。皆さんのエラーも直れば幸いです。ここまでご覧いただき、ありがとうございました!

お問い合わせ

記事の感想・不明点・リクエストやWEBサイト制作の困りごとなど、お気軽にお寄せ下さい。

お問い合わせ

広告
Fundemicの最新情報

Fundemicの最新情報

FundemicのFacebookページでは、
制作実績とTECHブログの最新情報を掲載しております。

CTR IMG