WordPressの引っ越しを行った際に、PHPのVer7系だと記事が表示されない現象があり、Ver5系に変更したのですが、その後調べてみるとWordPress自体はPHPのVer7系に対応していることがわかりました。さらに調べていくと、テーマやプラグインがPHPのVer7系に対応していないケースで発生することがわかってきました。
セキュリティ面では最新のバージョンを使うに越したことはないので、なんとかならないか調べていたところ、PHP Compatibility ChekerというWordPressのプラグインを使うと問題点のチェックができることがわかったので、インストールして確認してみました。
その結果、やはりテーマやプラグインに問題があるものが見つかりました。プラグインの出力するレポートにどのファイルの何行目がNGが記載されていますので、これを順に見ていくことにします。
テーマについては、式の評価の部分がPHPのバージョンによって差があるところが検知されましたので、これをPHPのバージョンに関わらず同じ評価になるように{}を追加しました。具体的には、
$$foo['bar']['baz']
という記述をすると、PHP5では、
${$foo['bar']['baz']}
と解釈されるのですが、PHP7では、
($$foo)['bar']['baz']
と解釈されるようです。(参考:http://php.net/manual/en/migration70.incompatible.php)
そこで、この$$が2つ続く箇所については{}を追加して、常にPHP5と同じ解釈になるように修正しました。
他には、
- Throws SPAM Awayというプラグイン
セキュリティ上の課題で変更になった関数(spilt() ⇒ preg_split())の単純な置き換え - WP SyntaxHighlighterというプラグイン
MySQLサーバのバージョン取得の関数(mysql_get_server_info() ⇒ mysqli_get_server_info())の単純な置き換え
を行いました。
また、使用していないプラグインについては停止・削除を行いました。
一通りの整理を行った後、再度チェックをかけるとエラーはなくなったので、PHPのバージョンをさくらのレンタルサーバで標準の7系にしたところ、それでもきちんと表示できるようになりました。
これとは別に、Crayon Syntax Highlighterというコードをきれいに表示してくれるプラグインが入っていたのですが、停止していました。その理由は、記号が化けてしまうからだったのですが、今回、ぐぐってみたところ、Crayon Syntax HighlighterのSettingの中のCodeのセクションにある「Decode HTML entities in code」にチェックを入れると治ったので、逆に有効化してあります。