【WordPress】Crayon Syntax Highlighterの致命的エラー修復について
以前ソースコードをブログに綺麗に記載するプラグインとして「Crayon Syntax Highlighter」をご紹介しました。
しかしこの「Crayon Syntax Highlighter」にはとんでもない落とし穴があり、使用しているWordPressのバージョンによっては致命的なエラーを引き起こす可能性があったのです。
目次
「Crayon Syntax Highlighter」とは?
|
1 2 3 4 5 6 |
<html> <?php include_once($webroot."/src/common/setup.php"); ?> <?php include_once($webroot."/src/parts/head.php"); ?> <?php include_once($webroot."/src/common/loginform-function.php"); ?> <?php include_once($webroot."/src/parts/body.php"); ?> </html> |
私もその一人で、このプラグインを使用し始めてからハンバーガーメニューが機能しなくなったり、抜粋記事が二記事しか表示されなくなったり、記事が正しく表示されなくなったりました。
原因は全て「Crayon Syntax Highlighter」よるものでした。
「Crayon Syntax Highlighter」によるエラー
「Crayon Syntax Highlighter」を使用した当初、エラーには気づきませんでした。その時のWordPressのバージョンは古いものであり、ある程度互換性があったためだと思います。
この「Crayon Syntax Highlighter」のエラーが明るみにでたのはWordPressのバージョンを最新版、Ver.5にアップロードした時のことです。
突然ブログのトップページに抜粋記事が2つしか表示できなくなりました。それだけじゃなくて画面を下にスクロールしようとすると一番上に戻されたり、記事が正しく表示されなくなりました。
WordPressの更新時に発生したバグだったので、原因はWordPress本体にあると思い、WordPressを古いバージョンにしたり、再インストールしたりとかなり混乱しましたが、再インストールした際に「Crayon Syntax Highlighter」を有効化した瞬間にバグが再び発生したため、このプラグインが原因と特定できました。
「Crayon Syntax Highlighter」はかなり古いプラグインです。WordPressのバージョンを5.0以上に上げた時に致命的なエラーが浮き彫りになりますが、「Crayon Syntax Highlighter」のプラグインがインストールされてる「/wp-content/plugins/crayon-syntax-highlighter」の中にある「crayon_langs.class.php」に原因があります。この中のコードを修正することで、バグを直すことができることが判明しました。
※あとで知りましたが、実際の原因はWordPressではなくPHP7.3以上が原因だったようです。
「Crayon Syntax Highlighter」の修復方法
原因は「crayon_langs.class.php」のソースコード、337行目付近にある
|
1 2 3 4 5 |
// Override function clean_id($id) { $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) ); return preg_replace('/[^\w-+#]/msi', '', $id); } |
の部分です。これを
|
1 2 3 4 5 |
// Override function clean_id($id) { $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) ); return preg_replace('/[^\w\-+#]/msi', '', $id); } |
[^\w-+#] → [^\w\-+#]
に変更すれば修復できるはずです。私はこれでVer5以上でも正常に動くようになりました。