トップページのフォーム部分にエラーメッセージが表示されている問題を解決した

はじめに

いつもお世話になっている地元名古屋の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を使用しない方法に書き換えました。

コメントを残す

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