お問い合わせフォームの障害

社内インフラ

2月25日に当ウェブサイトのお問い合わせフォームで使用しているWordPressプラグイン『Contact Form 7』が5.4にバージョンアップしました。

それにより、確認画面の表示を行う目的で使用していたプラグイン『Contact Form 7 add confirm』が正常に動作しなくなり『確認』ボタンを押しても先に進めず、お問い合わせができない障害が発生してしまいました。

お問い合わせの頻度が少ないために気付くのが遅れたのですが、さすがに2週間で1つも来ないのは変だなと…。

『Contact Form 7 add confirm』は3年以上も更新が止まっていてセキュリティ的に使用すべきではないという記事もありますが、更新が止まっている=セキュリティリスクが高いということではなく、セキュリティ更新が止まっている=セキュリティリスクが高いということです。

セキュリティ的に脆弱な箇所がなく更新されないのであれば問題ないはずです。

とはいうものの、本体の仕様が変わったことで動作しないこの状況で、今後も更新が期待できないとなれば何とかするしかありません。

ソースコードを見てみると、PHP部分はショートコードのハンドリングで、動作自体はJavaScriptで行っているようです。

それでJavaScriptを調べていて発見したのが、ユニットタグの内容が処理関数に渡っていないということでした。

Contact Form 7のカスタムDOMの説明を読んでみるとユニットタグのプロパティ名がContact Form 7 add confirmの記述と異なっていました。

ということでplugins/contact-form-7-add-confirm/includes/js/scripts.jsの下記の箇所を変更して確認すると無事動作しました。

@@ -220,10 +220,10 @@
 document.addEventListener( 'wpcf7submit', function( event ) {
        switch ( event.detail.status ) {
                case 'wpcf7c_confirmed':
-               wpcf7c_step1(event.detail.id);
+               wpcf7c_step1(event.detail.unitTag);
                break;
                case 'mail_sent':
-               wpcf7c_step2(event.detail.id);
+               wpcf7c_step2(event.detail.unitTag);
                break;

また、確認画面から一度でも戻ってしまうとエラーメッセージや完了メッセージが表示されなくなっていたため、wpcf7c_to_step1の最後に下記を追加してみました。

@@ -79,6 +79,11 @@
                setTimeout(function() { wpcf7c_scroll(parent.find("input[name=_wpcf7_unit_tag]").val()) }, 100);
        }
 
+       // 確認ボタン挙動
+       parent.find(".wpcf7c-btn-confirm").on("click", function() {
+         responseOutput.css("display", "");
+       });
+
 }

(2021/03/24 追記)
キャッシュにより修正後のJavaScriptが読み込まれず、動作しない現象が発生することがあるようです。

plugins/contact-form-7-add-confirm/contact-form-7-confirm.php内にある

define( 'WPCF7C_VERSION', '5.1' );

のバージョン部分(‘5.1’)を’5.1-20210324’等に変更すれば、古いキャッシュが残っていても大丈夫です。

コメント

  1. […] Contact Form 7 add confirmの挙動の直し方 […]

タイトルとURLをコピーしました