【WordPress】エラー対処法:Warning: Trying to access array offset on false in plugins/elementor/includes/base/widget-base.php, Undefined array key -1 controls-stack.php

wordpress-prograshi(プロぐらし)-kv WordPress
記事内に広告が含まれていることがあります。

Woocommerceを導入したElementorのサイトで以下のような2つのエラーが発生しました。

ここではこのエラーの原因と対処法をまとめています。

エラーの内容

Warning: Trying to access array offset on false in /home/example.com/wp-content/plugins/elementor/includes/base/widget-base.php on line 223

Warning: Undefined array key -1 in /home/example.com/wp-content/plugins/elementor/includes/base/controls-stack.php on line 695



エラーの内容

このエラーはElementorのサイトをサーバーを移管した場合に発生することがあります。

今回の場合、LolipopからXserverへのサーバー移管を行ったことで、移管先に切り替わったタイミングで発生しました。


1つ目のエラー

エラーの内容

Warning: Trying to access array offset on false in /home/example.com/wp-content/plugins/elementor/includes/base/widget-base.php on line 223

このエラーは、PHPのコードで「配列のインデックス(オフセット)にアクセスしようとしたが、その値がfalseだったために発生した」という警告です。具体的には、/home/example.com/wp-content/plugins/elementor/includes/base/widget-base.phpの223行目でこの問題が発生しています。

widget-base.phpファイルは、Elementorプラグインのウィジェットの基礎となるクラスや機能を提供するためのものです。具体的には、Elementorで使用されるすべてのウィジェットのベースクラスを定義しています。

ウィジェットとは、Elementor内で再利用可能なコンテンツの構成要素(ボタン、画像、テキストボックスなど)を指します。ベースクラスはすべてのウィジェットが共通で持つべき機能やプロパティをこのクラスで定義し、他の具体的なウィジェットはこのクラスを拡張(継承)することで作成されます。


2つ目のエラー

エラーの内容

Warning: Undefined array key -1 in /homeexample.com/wp-content/plugins/elementor/includes/base/controls-stack.php on line 695

このエラーは、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と干渉した可能性があります。

MEMO

Woocommerceを導入していない、通常のElementorサイトでは同じ設定で問題は発生しませんでした。


対処法

XアクセラレーターのVer2が影響を与えている可能性があるので、Ver1に切り替えます。


(参考)【Xserver】Xアクセラレータとは何か?サブドメインに適用する方法|Ver1とVer2の違い|.user.iniの書き方


切り替えてみましたが特に影響はありませんでした。

タイトルとURLをコピーしました