ContactForm7に完了画面をつける

2023.12.01 09:00
2024.05.28 16:06
ContactForm7に完了画面をつける

WordPressのお問い合わせプラグインとしてContactForm7があります。めちゃくちゃ便利なのですが、完了後にわかりにくいメッセージが出てくるだけなのがちょっと不満。できれば送信後は完了画面に飛んでほしいところです。

調べるとどうやらそれができる方法があるみたいです。
functions.phpにjavascriptが走るような記述して、送信時にリダイレクトさせるようにするみたいですので、やってみましょう。

実際の処理はfunctions.phpに追記するみたいです。
こんな感じです。

1. サンクスページの実装

add_action( 'wp_footer', 'contact_form7_thanks_page' );
function contact_form7_thanks_page() {
  $thanks = home_url('/contact_comp/');
   echo <<< EOC
     <script>
      document.addEventListener( 'wpcf7mailsent', function() {
        location = '{$thanks}';
      }, false );
     </script>
   EOC;
}

wpcf7mailsentというイベントが発生したら「/contact_comp/」にリダイレクトする、という感じですね。当然ですがこれはjavascriptが生きていないとダメということでしょうね。まぁそんな環境は今どきあまりないので心配はいらないでしょう。

もちろん予め固定ページでサンクスページを作っておく必要はあります。
ちなみにここだと「contact_comp」がそれに当たりますね。

ただ、一つ問題が。
フォームが1つならいいのですが、2つ以上になるとこれではうまくいきませんでした。
たくさんのフォームをつくっても、「contact_comp」に飛んでしまいます。どうすればいいのか?

2. 複数のフォームに対応させる

どうやら条件分岐をすると複数フォームに対応できるようです。
各フォームのIDを拾って、それを元に分岐させるみたいですね。
IDは、postIDを使います。設定画面のURLが「admin.php?page=wpcf7&post=20&action=edit」の用になっていると思いますが、この「post=20」の部分です。「20」がIDです。

コードはこんな感じ。

add_action( 'wp_footer', 'contact_form7_thanks_page' );
function contact_form7_thanks_page() {
  $contact = home_url('/contact_comp/');
  $entry = home_url('/entry_comp/');
   echo <<< EOC
     <script>
      document.addEventListener( 'wpcf7mailsent', function( event ) {
        if ( '10' == event.detail.contactFormId ) {
          location = '{$contact}';
        } else if ( '20' == event.detail.contactFormId ) {
          location = '{$entry}';
        }
      }, false );
     </script>
   EOC;
}

それぞれのリダイレクト先のURLを指定し、eventの「contactFormId」を拾ってから、予め調べておいたpostIDと照らし合わせる感じです。

今回は以上です!