Woocommerceを導入したElementorのサイトで以下のような2つのエラーが発生しました。
ここではこのエラーの原因と対処法をまとめています。
エラーの内容
このエラーはElementorのサイトをサーバーを移管した場合に発生することがあります。
今回の場合、LolipopからXserverへのサーバー移管を行ったことで、移管先に切り替わったタイミングで発生しました。
1つ目のエラー
このエラーは、PHPのコードで「配列のインデックス(オフセット)にアクセスしようとしたが、その値がfalseだったために発生した」という警告です。具体的には、/home/example.com/wp-content/plugins/elementor/includes/base/widget-base.phpの223行目でこの問題が発生しています。
widget-base.phpファイルは、Elementorプラグインのウィジェットの基礎となるクラスや機能を提供するためのものです。具体的には、Elementorで使用されるすべてのウィジェットのベースクラスを定義しています。
ウィジェットとは、Elementor内で再利用可能なコンテンツの構成要素(ボタン、画像、テキストボックスなど)を指します。ベースクラスはすべてのウィジェットが共通で持つべき機能やプロパティをこのクラスで定義し、他の具体的なウィジェットはこのクラスを拡張(継承)することで作成されます。
2つ目のエラー
このエラーは、PHPコードで指定された配列のキー-1が存在しない場合に発生します。PHPは配列に存在しないキーを指定してアクセスしようとすると、このような「未定義の配列キー」警告が出ます。
配列のキーとして-1が使われていますが、負の数をキーとして使うのは通常の操作ではなく、何かの計算エラーやデータ不整合によって誤って-1が生成されている可能性があります。
エラーの想定原因
最初、Woocommerceを導入したElementorサイトで発生したので、Woocommerceの問題かと思いました。
ですが、通常のElementorサイトを移管したときも発生しました。
この原因は、旧サイトでPHPのバージョンが8以下だったものが、新しいサイトでPHPバージョンが8以上になったことが原因です。
今回発生した「Undefined array key -1」と「Trying to access array offset on false」という警告は、PHP7.3以下では無視されていました。それが、PHP8以降で無視されなくなり表面化するようになりました。
実際に旧サーバーと新サーバーのPHPを確認してみると、旧サーバーはPHP7.4になっています。
新サーバーではPHP8になっていました。
対処法
対処法はPHPのバージョンを7.4以下に下げることです。
PHPのバージョンを下げたことでエラーが発生しなくなりました。
補足:エラーの対象はプラグインによる
PHP7.4以下をPHP8に変更すると必ずこのエラーが発生するわけではありません。一部のPHP8に対応していないプラグインがこのエラーを引き起こします。
調べるには、Elementorなどの主要プラグイン以外のプラグインを1つづつ無効化していきます。「プラグインを1つづつ無効化 → ブラウザをリロードして確認」を繰り返します。
今回の場合は「Happy Elementor Addons」を無効化したところ、エラーメッセージが消えました。
Xアクセラレーターは関係ない
当初想定された原因
発生原因の1つとして考えられるのはXserverのXアクセラレーターというオプション機能です。
XアクセラレーターはWEBサイトを高速化するために、HTMLやCSS、JavaScriptなどを一時的にキャッシュしてくれるものです。
このXアクセラレーターのver2を使うと、キャッシュに加えPHPプログラムの高速化処理も行います。
このPHPプログラムの書き換えがWoocommerce + Elementorと干渉した可能性があります。
対処法
XアクセラレーターのVer2が影響を与えている可能性があるので、Ver1に切り替えます。
(参考)【Xserver】Xアクセラレータとは何か?サブドメインに適用する方法|Ver1とVer2の違い|.user.iniの書き方
切り替えてみましたが特に影響はありませんでした。