WordPressプラグイン「Newpost Catch」の利用で表示される「Warning: Illegal string offset」の対処法

「過去の投稿一覧」を表示させるため WordPressプラグイン「Newpost Catch」を利用しています。

「Newpost Catch」を使ったページに警告表示が

「Newpost Catch」は「過去の投稿一覧」で使っています。

そして掲載当初は何の問題もなく使えていました。

 

ところが、ある日突然、警告表示が現れるようになったのです。

2016-07-02 08.15.39

 

そのメッセージは以下の通りです。

Warning: Illegal string offset ‘active’ in /home/{途中のパスは省略}/wp-content/plugins/newpost-catch/class.php on line 115

「Warning: Illegal string offset」とは

正直、php はあまり理解できていないので、エラーメッセージを頼りに情報を検索したところ、ずばり以下のページが見つかりました。

考えられるエラーの原因
このワーニングは、存在しない文字列に関数がアクセスしようとするときに発生します。PHP5.3からPHP5.4にアップデートされた場合、このワーニングが追加されていますので突然表示されたように思える事もあります。

確かに、php がアップデートされた後から表示されるようになった記憶があります。

 

そして対処方法として以下の提案がされていました。

関数を修正する

isset というもし文字列が存在するならアクセスするという命令文を該当のエラー箇所に付け加えるとワーニングは出なくなります。

なるほど。やってみましょう。

if 文と isset を使って 2か所修正しました

実は「過去の投稿一覧」の先頭にも警告表示が出ていました。

2016-07-02 08.34.48

 

具体的には以下の警告です。

Warning: Illegal string offset ‘active’ in /home/{途中のパスは省略}/wp-content/plugins/newpost-catch/class.php on line 41

 

そこで「プラグイン編集」画面で「Newpost Catch」を選択し、「newpost-catch/class.php」の編集画面で 41行を確認したところ

$options[$key] = $val[‘css’][‘active’];

となっていました。そこで、これを

$options[$key] = “”;
if(isset($val[‘css’][‘active’])){$options[$key] = $val[‘css’][‘active’];}

と変更して更新したところ、警告表示が消えました。

 

◎追記(2016/7/10)
このページをご覧になった方から、

$options[$key] = isset($val[‘css’][‘active’]) ? $val[‘css’][‘active’] : ”;

のほうがスマートな書き方では?とアドバイスをいただきました。確かにそうようです。早速、書き替えて、問題なく表示されることも確認できましたました。ありがとうございます。
同様に 115行も、本当にこれでいいのかは分かりませんが

$date = ‘<span class=”date”>’ . get_the_time( get_option(‘date_format’) ) . ‘</span>’;
if(isset($instance[‘date’][‘active’])) {
$date = ( $instance[‘date’][‘active’] == true ) ? ‘<span class=”date”>’ . get_the_time( get_option(‘date_format’) ) . ‘</span>’ : ”;
}

とした結果、とりあえず、こちらも警告表示は消えました。

 

やっと通常に戻った感じです。

2016-07-02 08.42.00

再発したときの備忘録のためにも記事に

「Newpost Catch」は結構、人気のプラグインで、利用者も多いはずです。

2016-07-02 08.49.20

 

にもかかわらず「Newpost Catch Warning」で検索しても、同じ警告表示に悩まされている記事は見つけられませんでした。

ということは、私の WordPress だけの症状なのか、不安になってしまいます。

 

とにかく今回はスクリプトをいじったので「Newpost Catch」が更新されたときに先祖返りして、再び警告が表示されてしまうかもしれません。

そのため、今回の対処法を記録することで対処しようというわけです。

 

こちらの記事もいかがですか?