WordPress php7.3移行時にCrayon Syntax Highlighterでエラーが発生する

WordPress php7.3移行時にCrayon Syntax Highlighterでエラーが発生する

WordPressで、php7.3移行時にCrayon Syntax Highlighterでエラー「Uncaught Error: Call to a member function id() on array in」が発生した場合の原因と対処法を記述してます。

環境

  • WordPress 5.5.1

エラー全文

Crayon Syntax Highlighterを使用しているページで発生

Notice: Undefined offset: 0 in /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 532

Fatal error: Uncaught Error: Call to a member function id() on array in /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php:36 
Stack trace: #0 /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(538): 
CrayonFormatter::format_code('', Array, Object(CrayonHighlighter)) #1 [internal function]: CrayonFormatter::delim_to_internal(Array) 
#2 /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php(516): preg_replace_callback('#()#msi', 'CrayonFormatter...', 'double x, y, an...') 
#3 /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(166): 
CrayonFormatter::format_mixed_code('double x, y, an...', Object(CrayonLang), Object(CrayonHighlighter)) 
#4 /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_highlighter.class.php(186): 
CrayonHighlighter->proces in /home/users/xxx/wp-content/plugins/crayon-syntax-highlighter/crayon_formatter.class.php on line 36

原因

php7.3で正規表現のマッチングが変わったため

対処法

一番いいのは、こちらのサイトより修正版をダウンロードして、アップする方法

ダウンロードした「crayon-syntax-highlighter-2.8.6.zip」を解凍して、

中のファイルを、全て「/wp-content/plugins/crayon-syntax-highlighter」にアップする

「crayon_langs.class.php」の以下をコメントアウトして、コードを記述してもエラーは消えるが
「Notice: A non well formed numeric value encountered in」などの警告などにも対応する必要があり、面倒なので、前述した方法が一番楽かと思われます。

// Override
function clean_id($id) {
    $id = CrayonUtil::space_to_hyphen( strtolower(trim($id)) );
    //return preg_replace('/[^\w-+#]/msi', '', $id);
    return preg_replace('/[^\w+#-]/msi', '', $id);
}