PHP7.3や5.6からPHP8にバージョンアップしたら、wordpressにエラーが出たので、対処方法を備忘までに記録しておきます。
事の発端
先日、複数のクライアントから「レンタルサーバーの業者からPHPをバージョン8以上にアップデートするよと通知があったけど、ウチのサイトは大丈夫?」との連絡が入りました。
それで、試しにテストサーバー上で、PHP8にバージョンを上げてみて、アクセスしたら、こんな感じ。
見事にエラーが出ました。
PHP5.6からアプデした方は、一般ユーザー向けのページ全てと、管理画面もエラーになりました。
PHP7.4からアプデした方は、一般ユーザー向けのページ全てがエラー
エラーの原因
直接的な原因はwordpressのバージョン不足。
調べたところ、wordpressの5.5以下のバージョンはPHP8には未対応。故にエラーになると判断できました。
参考↓
長期で運営している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ではエラーになったりするんですね…勉強になりました。
今回の記事は以上になります。皆さんのエラーも直れば幸いです。ここまでご覧いただき、ありがとうございました!