以前「サーバーのPHPを7にしたらWordPressプラグインでFatal Errorが出た件とその修正法」という記事を書いたのですが、その後に各プラグイン毎に修正しているので、備忘録という意味でもまとめ記事を書いておきます。

PHP 5→PHP 7でバグったWordPressプラグイン

このブログで利用している下記のWordPressプラグインがPHP 5からPHP 7にしたらバグりました。
PHPのFatal Errorが出たり機能しなくなります。

  • AutoExternalLink
  • brBrbr
  • LAMP Version Checker

上記の3プラグインを、下記の様に修正しました。

AutoExternalLinkのPHP 7対応

AutoExternalLink」は、外部リンクにアイコンを付けて自動でtarget=”_blank”してくれるプラグインです。
このプラグインのAutoExternalLink.phpの51行目に下記のスクリプトがあります。

$wpAEL = & new AutoExternalLink();

これを下記の様に修正します。

$wpAEL = new AutoExternalLink();

“&”を抜く事でエラーが解消されます。

brBrbrのPHP 7対応

brBrbr」は、WordPressの記事投稿でテキストエディタを利用する際に、改行タグのbrを書かなくても文章を改行した通りに反映してくれるプラグインです。
brBrbr.phpの24~26行目に下記のスクリプトがあります。

$brbr = preg_replace('/(<pre.*?>)(.*?)<\/pre>/ise', "clr_br('$0')", $brbr);
$brbr = preg_replace('/(<script.*?>)(.*?)<\/script>/ise', "clr_br('$0')", $brbr);
$brbr = preg_replace('/(<form.*?>)(.*?)<\/form>/ise', "clr_br('$0')", $brbr);

これを下記の様に修正します。

$brbr = preg_replace_callback('/(<pre.*?>)(.*?)<\/pre>/is', function($m) {return clr_br($m[0]);}, $brbr);
$brbr = preg_replace_callback('/(<script.*?>)(.*?)<\/script>/is', function($m) {return clr_br($m[0]);}, $brbr);
$brbr = preg_replace_callback('/(<form.*?>)(.*?)<\/form>/is', function($m) {return clr_br($m[0]);}, $brbr);

preg_replaceをpreg_replace_callbackにし、preg_replaceのe修飾子を使わない様にする事で、エラーが解消されます。

LAMP Version CheckerのPHP 7対応

LAMP Version Checker」は、WordPressの管理画面内で、WordPressを動かす為に必要な各種ソフトウェアのバージョンを簡単に確認出来るプラグインです。
lamp-version-checker.phpの57行目に下記のスクリプトがあります。

$this->versions['MySQL'] = mysql_get_server_info($wpdb->dbh);

これを下記の様に修正します。

$this->versions['MySQL'] = mysqli_get_server_version($wpdb->dbh);

mysql_get_server_infoはPHP 7で削除された為、MySQLiを利用する事で、エラーが解消されます。

参考

PHP7でpreg_replaceのe修飾子の挙動が変わるので要注意です。
下位互換性のない変更点
preg_replace
preg_replace_callback
mysql_get_server_info

コメントを投稿する

* が付いている項目は必須です。
メールアドレスが公開されることはありません。