【Word Press】画面にWarning: Invalid argument supplied for foreach() ~という謎のエラー。超絶初心者の私でも解決できた!図解でスッキリ。ほぼ自分用

スポンサードリンク
Pocket

ワード・プレス(Word Press)、本体もプラグインも更新は頻繁。回数が多ければ不具合も起きます。ある日、トップ画面に消せない謎のエラーメッセージ。HTMLやタグの意味もわからず、ましてやCSSなんて全く知らない私は右往左往。でも解決できました。実にアナログな解説です。でもHTML音痴の人にはきっと役立つハズ!知っている人には何て幼稚な説明で「みんな知ってるわ!」と思われるハズ。

<ブログアップ後の追記>

今回のトラブルは、プラグイン:head-cleanerが新バージョンに対応していないため、head-cleanerを削除することで回避できたと判明。それが一番の近道だったのは明らかですが、同様のトラブルのヒントとして云々・・。いやー遠回りしちゃいました。では。

事件の発端

ワード・プレスを4.7にアップデートした

ワード・プレスの更新は割と頻繁で、ふと更新タブに目をやると「更新してね」の赤いマーク。プラグインをたくさん使っているとなお頻繁にあります。

更新しないと不具合が起きるというけれど、更新してもこのようにエラーが起きたりします。

今回はワード・プレス本体の更新ということで3.××→4.7へのアップデート。3→4へ変わることだしこれはアップデートしなきゃなと思い更新をポチリ。

そして画面トップに謎のメッセージが現れた

!!!!!

なんだこれは!

更新タブ画面の上部に謎のエラーメッセージ。

Warning: Invalid argument supplied for foreach() in /home/XXXXXXXX/YYYYYYYY/public_html/wp-content/plugins/head-cleaner/head-cleaner.php on line 1192

しかもコレが4回も繰り返されていた。

なぜ1回じゃなく4回も!

いや、問題はそこじゃないんですけどね。

ただ、すんごいインパクトがありました。この文字数で4回ってかなりのスペースを占領していますから。1回言えばわかるのに。

でも、内部的な問題だからブラウザでサイトを見たらこのメッセージは表示されていないんだろうなと。

ところが、

私のスマホで見てもこのメッセージが出てる!つまりどこからアクセスしても、この作成者に向けての警告メッセージが表示されているということ。それは、涼しい顔で街中に立っている私の靴下に、実は穴がいていると背中に書かれてバラされているのと変わらないわけです。

もう悶絶しました。

エラーメッセージのラスト『~on line 1192』がイイクニツクロウ鎌倉幕府とかぶってることなど全く気が付く余裕すらなかったのです。

Google先生に聞いてみよう

Warning: Invalid argument supplied for foreach()を検索

Google先生からそれなりに答えは出てきました。

簡単に言えば、ソースコードの1192行目に書かれているforeach文に不具合起きてるよ!ってことらしい。メッセージの主は、あることを実行するの?しないの?って訴えていると。

知らんがな

とは正直な気持ち。そこはまぁグッとこらえまして、対応策の検索結果を整理すると主に下の三つが多かったと思います。

①テーマを最新のものにする。もしくは再インストールしてみる。

②foreach文を修正する。

③プラグインを一つ一つ確認してみる。

どれも未経験なので手探りの中やってみることになります。

検索結果をもとに2つの方法を実行

上記の『③プラグインを一つ一つ確認してみる。』については混乱して更に状況が悪化する可能性があるので見送り。①と②について検証しました。

①テーマの再インストールをやってみる

確かにテーマが古くて新しいワード・プレスに対応できていないというのは理にかなっていると思い『テーマを最新のものにする』を実行。とはいうもののワード・プレスの外観→テーマには更新ボタンというものがありません。なので再インストールしてみようと思いました。

使用中のワード・プレスにバージョン違いであっても同じものを再インストールすることはできません(既にインストール済みですと言われる)。なので、現在使用中のものを一度削除します。ただ、使用中のテーマを削除しようとするとワード・プレス側で拒否します。「それ、使用中ですから!」と。対策として、ダミーで別のテーマを有効にします。そすると今まで使っていたテーマは未使用となるので削除が可能になります。そして、削除した後に改めてテーマを再インストールします。つまり、

おじいちゃんがいました。おじいちゃんのクマ柄の靴下に穴が開いています。履き代えが必要です。でも新しい靴下を用意する間、何もないとおじいちゃんは寒がります。なので代わりのどうでもいい靴下を履かせます。その間に穴あき靴下は廃棄。そして新しいクマ柄の靴下を履かせます。はい、バージョンアップ終了。おじいちゃんはワード・プレス自身です。

え、わかりにくい・・か。

作業は外観→テーマの画面で行います。

・別のテーマ(なんでもいい)を有効にする。

・元のテーマをクリック。開いた画面右下の赤文字『削除』をクリック。削除完了。

・最新のテーマをダウンロード。※私はsimplicity 子テーマを使わせていただいています。お世話になっております。

・外観→テーマ画面、左上のテーマの文字の横にある新規追加をクリック→テーマのアップロードファイル選択でダウンロードしたテーマのファイルを選択。ファイルが展開される。有効化をクリック。

【結果】

できれば再インストールで解決してくれ!と願っていた希望は見事に打ち砕かれました。なにしろソースコードをどうにかしろなんてできるわけないですから。こちとら平凡なファミコン世代。ゲームはできてもプログラム何ていじれるわけがない。でも、やるしかなっかたんです。トホホ。・・・トホホて。

②foreach文を修正する。

ネット上にここを修正しろという記事は多数ありました。しかし、どこのサイトを見ても全く意味が分かりませんでした(私の知識不足なんですけどね)。配列?変数?関数? エクセルの関数すら使いこなせていない私にはチンプンカンプン。それでもとある場所の『foreach ($active_filters ~』の『foreach (』と『$active_filters~』の間に『(array)』をコピペしたらいいのかと薄っすらわかりました。

しかし一番の問題は、

書き換えるソースはどこにあるの?

そうなんです。ソースコードの書き換え方はどこもしっかり書いてありますが、どこにあるのそれ?っていうことなんです。

ワード・プレス内を探しても全く見つからない。それらしき文字列を見たと言ったら、テーマの編集あたりか。うーん、でも1000行以上にわたるソースが書いてある場所なんて見たことがない。私の知識では原因の特定ができない。

解説記事は事故現場からの実況中継のみでその現場がどこにあるかを教えてくれない。なぜだ?!私は現場に急行したいのに!

おそらくその辺を勉強している人たちには常識も常識の話なのでしょう。どこを直さなくてはならないかなんて聞くか普通、というレベルなんでしょう、トホホ(2回目)。

問題解決の糸口

ブツブツ言いながらもうふて寝するかと思った矢先に希望の光が差しました。

あるサイトで目に入った文字『FTP』。

ん?『FTP』。『FTPソフト』っていうと作成したデータをサーバーにアップするときに使うあのソフト?サーバー?そうか、サーバーか!サーバー!サーバー!

なんという安っぽい振る舞い。小学校低学年向けのなぞなぞを真剣に解いた瞬間の大人みたいな。こんなのひらめきでも何でもないことなのでしょうが、私にはとてもキラキラした瞬間でした。

直るかもしれない。そう思った瞬間でもありました。あー恥ずかしい。

Warning: Invalid argument supplied for foreach()エラーを解決

サーバーの管理画面にログイン

①私はエックスサーバーを使っています。まずはエックスサーバーへログイン。


②インフォパネルからファイルマネージャーへログイン。


③すると、WEB上からFTP直接操作ができる画面『WEB FTP』に行けます。そこに対象のサイトらしきフォルダが!


④ここから先は、

Warning: Invalid argument supplied for foreach() in /home/XXXXXXXX/YYYYYYYY/public_html/wp-content/plugins/head-cleaner/head-cleaner.php on line 1192

のエラーメッセージの通りにフォルダを開いていく作業になります。

XXXXXXXXは②のサーバーID、YYYYYYYYは③のファイル名にあたります。つまり、親切に階層ごとの場所を順番で示してくれているというわけです。

なので以下、

/public_htmlwp-contentpluginshead-cleaner→head-cleaner.php →1192行目

の順で階層を進んでいきます。

★注意:head-cleaner.phpはクリックしないで、左端のボックスにチェックを入れます(後述します)。もし仮に勢いでクリックしたとしても記述ファイルがダウンロードされるだけなので問題ありません(捨ててください)。


public_html】をクリック

/public_html→wp-content→plugins→head-cleaner→head-cleaner.php →1192行目


wp-contentをクリック

/public_html→wp-content→plugins→head-cleaner→head-cleaner.php →1192行目


pluginsをクリック

/public_html→wp-content→plugins→head-cleaner→head-cleaner.php →1192行目


head-cleanerをクリック

/public_html→wp-content→plugins→head-cleaner→head-cleaner.php →1192行目


head-cleaner.phpはクリックしない

/public_html→wp-content→plugins→head-cleaner→head-cleaner.php →1192行目

★注意:head-cleaner.phpはクリックしないで、左端のボックスにチェックを入れます。もし仮に勢いでクリックしたとしても記述ファイルのダウンロードが始まるだけなので問題ありません(捨ててください)。

⑤チェックを入れたら編集をクリック


⑥するとこんな画面が現れます。

やっとたどり着いたソースコード本拠地?(何て言ったらいいんだろう)。1192行目まであと少し。

この後はちょっとだけ別の作業になります。というのも、1192行目をどうやって特定したらいいのかということです。似たような記述はたくさんあるあるし、一行一行数えるのはあまりに過酷です。そこでWINDOWSのメモ帳を利用しました。まずはサーバー画面でソースをコピー。


⑦ソースコードにカーソルを置きます。ここでCtrl+Aでソースコードをすべて選択。Ctrl+Cでコピー。

コピーできたら次はメモ帳での作業になります。


WINDOWSメモ帳での作業

⑧WINDOWSのメモ帳を立ち上げます。そしてCtrl+Vでペースト。これでメモ帳にソースコードが丸写しされました。


⑨ここでメモ帳のメニューから表示をクリック。ステータスバーを有効にします。


⑩そうするとカーソルを合わせた場所の位置がわかるようになります。


⑪ついに犯人を突き止めました。1192行目のこの一文。ようやくたどり着けました。トラブル発生から長い道のりだった。そしてこの一文をCtrl+Cでコピー。


解説記事によれば、『foreach ($active_filters ~』の『foreach (』と『$active_filters~』の間に『(array)』をコピペしたらいいとのこと(若干表記違うけど)。

本当に問題の場所が解説通り『foreach』になっていたことに感動しました。ようやく希望の光が。

再びサーバーのソース画面に戻ります

⑫ソース画面でカーソルを置き、Ctrl+Fで検索窓を開きます。ここに⑪でコピーした『foreach ((array)$filters as $filter) {』をペーストします。で、検索。

ブラウザによって違うかもしれませんが、Google Chromeではこんな風に表示されます。

検索結果が1/1なので問題の文言は一発で特定できたことになります。もし検索結果が複数であっても、メモ帳の1192行目の前後の文言と比較したら特定は容易だと思います。


⑬問題個所の特定完了。ついに『foreach ($active_filters ~』の『foreach (』と『$active_filters~』の間に『(array)』をコピペです。


⑭最後に編集ボタンをクリックして完成。

画面を更新したらエラーメッセージは消えてるはずです。

修正を終えて

対処法さえ分かっていれば実にあっけない

確かにやり方さえ知っていれば解説記事にある通り10分程度で終わると思います。しかし、いまだに原因も具体的なエラー内容もよくわかりません。やっぱりアップデートによるワード・プレスとプラグインの不具合相性なのでしょうか。謎、謎、謎。

昔はワード・プレスは専門知識を必要とするためど素人には扱いにくいと言われていました。でもプラグインがたくさん登場したおかげで私のような者でもなんとか使えています。

今ではかなりの人が愛用しているワード・プレス、そのおかげでまたトラブルの解決方法を共有できます。これからもきっとネットの中の方々の知恵を借りながら愛用していくことでしょう。今回は本当に助かりました。それでは良きブログライフを。