PHP 7.0系におけるWordPressのエラー原因はW3 Total Cache!? その解決方法を解説します

昨年12月にリリースされたPHPの新バージョン 7.0 系。
前バージョンとなるPHP 5系と比較して、2倍以上高速化されたということでバージョンを切り替えてみたところ、WordPressサイトである当ブログにエラーが表示されてしまったんですよね。。
ということで、その原因と解決方法を探ってみました。

Photo:WordPress Moleskine notebook By:Nikolay BachiyskiPhoto:WordPress Moleskine notebook By Nikolay Bachiyski

基本的にWordPressそのものはPHP 7.0系に対応されているので、エラーなど出るはずがないのですが、サイトの最下部には以下のメッセージが表示されます。

PHP Warning: Parameter 1 to W3_Plugin_TotalCache::ob_callback() expected to be a reference, value given in /wp-includes/functions.php on line 3464

パッと見ただけだと、WordPressのコアファイルに起因するもののように見えますが、重要なのは前半部分。

W3_Plugin_TotalCache:ob_callback()

とありますよね。これはWordPressユーザーにはお馴染みのキャッシュプラグイン「W3 Total Cache」を指し示しています。

つまりWarningが表示される要因は「W3 Total Cache」にあるということです。

「W3 Total Cache」は2016年1月現在、約5ヶ月ほどにわたって更新がありませんから、PHP 7.0系に対応したバージョンアップがされていないんですね。まぁ、エラーが出るのも致し方なし。
しかし、このままでは常にエラーメッセージがサイトに表示されっぱなしになりますし、どうにかしなければなりません。

ということで、修正方法を探ってみたんですが、さすがはWordPress。
しっかりと修正の手立てがありました。

これによると、「W3 Total Cache」のコアファイルであるTotalCache.php内に記述された1行を修正するだけで良いとのこと。
ファイルは/wp-content/plugins/w3-total-cache/lib/W3/Plugin/の中にあります。

このファイルの512行目に記述された
function ob_callback(&$buffer) {
という部分を、
function ob_callback($buffer) {
に変更すればOK。

そのうちプラグインのアップデートで解消されるとは思うんですが、「W3 Total Cache」を使っていて、今すぐにでもPHP 7.0系を利用したいという場合は、自己責任で上記ファイルを修正するといいですね。