トップページのフォーム部分にエラーメッセージが表示されている問題を解決した
はじめに
いつもお世話になっている地元名古屋のWEB制作会社の担当者の方から、WordPressのサイトのトップページのフォームにエラーメッセージが出ているので解決してほしいというご依頼を、chatworkで受けました。
発生していたエラーメッセージ
以下のエラーメッセージがフォームの部分に表示されてしまっていました。
Deprecated: Function create_function() is deprecated in ・・・・・
・・・以降はエラー箇所が入っているので省略します。
日本語にすると
エラーメッセージを日本語にすると、「非推奨: 関数 create_function() は非推奨です」となります。
エラーの原因
原因は、contact-form7のバージョン4.7で、PHP 7.2.0から非推奨になったcreate_functionという関数を使用していたことでした。
サイトではPHP 7.4.3を使用していたためエラーメッセージが発生していました。
contact-form7の最新バージョン5.6.3ならPHP7.4.3に対応していると思われるため今回のエラーは発生しなかったでしょう。
解決方法
プラグインのエラーが発生していたファイルからcreate_functionという関数を探して、現在使用しているPHPのバージョンに合わせた書き方に変更しました。
STEP1: google検索
googleで、「contact-form7 create_function」というキーワードで検索をかけ、1ページ目に表示されたContact Form 7 4.9.1のリリースページをクリックしました。
今回エラーが発生していたcontact formのバージョンは4.7なのでそれよりも新しいバージョン(4.9.1)のリリース情報です。
STEP2: 変更点に注目
ページに書かれていた「セキュリティリスクと PHP 7.2 以上での警告を避けるため create_function()
を使用するコードを除去。」という変更点に着目しました。
これで4.9.1以降のバージョンでcreate_functionを使用しなくなったことが分かります。
STEP3: 4.9.1をダウンロード
記述の変更点を確認するためバージョン4.9.1をダウンロードしました。
ダウンロードはこちらのページの下の方にある以前のバージョンから行いました。
STEP4: ソースコードを確認
エラーメッセージに表示されていた「wp-content/plugins/contact-form-7/includes/formatting.php」にあるcreate_function()をバージョン4.7と4.9.1で見比べて、非推奨のcreate_function()を使用しない記述方法に変更しました。
バージョン4.7
PHP 7.2.0から非推奨になったcreate_functionという関数を使用しておりこれがエラーメッセージの原因でした。
$pee = preg_replace_callback( '/<(script|style|textarea).*?<\/\\1>/s', create_function( '$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);' ), $pee );
バージョン4.9.1
create_functionを使用しない方法で同じ意味の記述が書かれていました。
$pee = preg_replace_callback('/<(script|style|textarea).*?<\/\\1>/s',
'wpcf7_autop_preserve_newline_callback', $pee );
function wpcf7_autop_preserve_newline_callback( $matches ) {
return str_replace( "\n", '<WPPreserveNewline />', $matches[0] );
}
STEP5: ソースコードの修正
バージョン4.9.1の記述を参考にして、「wp-content/plugins/contact-form-7/includes/formatting.php」のcreate_function()を使用している箇所をcreate_functionを使用しない方法に書き換えました。
コメントを残す