wordpressのプラグイン、head-cleanerのエラーをどうにかしてみた。
先日wordpress4.7が公開されたので、早速アップデートしてみると、今まで重宝していたプラグイン”head-cleaner”でエラーが…。
とりあえず急場しのぎで無理やり解決させたので備忘も兼ねて書いておきます。
”配列が空です!!”って怒られてる
エラーメッセージを見ると以下のような感じ。
Warning:invalid argument supplied for foreach() in~head-cleaner.php on line 2895
どうやら配列が空だよって怒られてるみたいだったので、とりあえず指定されたあたりを見てみると、以下のような記述になっていました。
foreach ($active_filters as $priority => $filters) {
foreach ($filters as $filter) {
$function_name = $this->_get_function_name($filter['function']);
if ( $this->function_enabled($function_name) ) {
if (!isset($this->filters[$tag]))
$this->filters[$tag] = array();
$this->filters[$tag][$function_name] = $priority;
}
}
}
【追記】
「上記のコードがある場所が分らない!!」というご質問があったので、以下にご説明します。
- 管理画面内の”プラグイン”の項目内の”プラグイン編集”をクリック
- 開いた画面にある”編集するプラグインを選択”のプルダウンでhead-cleanerを選択し、選択ボタンを押す
- head-cleaner/head-cleaner.phpのソースが表示されるので、上記の箇所を探す。
(”Get Filters”という項目の中にあります。)
2行目の部分が問題の箇所だったので、以下のようにして配列が空か否かを判別させるようにしてみたところ、エラーもなく、プラグインも動くようになりました。
foreach ($active_filters as $priority => $filters) {
if(is_array($filters)){
foreach ($filters as $filter) {
$function_name = $this->_get_function_name($filter['function']);
if ( $this->function_enabled($function_name) ) {
if (!isset($this->filters[$tag]))
$this->filters[$tag] = array();
$this->filters[$tag][$function_name] = $priority;
}
}
}
}
上記の変更を参照される場合、万が一動かない箇所があった場合等は、自己責任にてお願いいたします。
早くプラグインアップデートがかかることを祈りつつの応急処置のご紹介でした。
追記(2017/01/19)
head cleanerがバージョンアップされていたので、早速更新し、中身を確認してみました。
foreach ($active_filters as $priority => $filters) {
if (!is_array($filters)) {
continue;
}
foreach ($filters as $filter) {
$function_name = $this->_get_function_name($filter['function']);
if ( $this->function_enabled($function_name) ) {
if (!isset($this->filters[$tag]))
$this->filters[$tag] = array();
$this->filters[$tag][$function_name] = $priority;
}
}
}
そうか、continueか。
これなら閉じカッコのつけ忘れもなく条件を追加できますね。
大変勉強になります。
今後のプログラミングに是非生かしたいです。






