Contact Form7のメールにフォームが載っているページの情報を追加する

やりたいこと

WordPressのプラグインContactForm7を使用したフォームのメールに、フォームが載っているページの情報を追加したい。

 

背景

Contact Form7では、メールにサイト情報を記載するときに[_url]などの特殊なメールタグを使用することができる。(参考:https://contactform7.com/ja/special-mail-tags/

しかし、multistepで確認画面を作る場合は、[_url]などの特殊なメールタグで情報を取得すると確認画面の情報が取得されてしまう。

そのため、確認画面のメールでもフォーム入力時のページ情報を取得したい。

 

実装

簡単な流れは以下の流れになる。

①functions.phpにショートコードとフィルターを追加して、フォームの値に任意の値をセットする。

②フォームの本文で、値を取得して、確認画面のメールに渡す。

③確認画面のメールに表示させる。

 

具体例

具体例として、フォームが載っているページのURLを取得する。

1:functions.phpにコードを記載

functions.php

function get_url() { ・・・①
  return get_the_permalink();
}
add_shortcode('page_url', 'get_url', true); ・・・②
function form_tag_filter($tag) {
  if (is_array($tag)) {
    if ('current_url' === $tag['name']) { ・・・③
       $tag['values'] = array(do_shortcode('[page_url]')); ・・・④
    }
  }
  return $tag;
}
add_filter('wpcf7_form_tag', 'form_tag_filter', 11); ・・・⑤

①URLを取得する関数を作成する

②page_urlの名前(名前はなんでもよい)で、①で作成した関数のショートコードを作成する

③フィルターで実行する関数を作成し、フォーム本文のタグ名と一致するかを確認する

④フォーム本文のタグ名が一致したら、②で作成したショートコードを実行し、タグの値に代入する

⑤フォームのタグが読まれたタイミングで③の関数を実行するフィルターを追加する

 

2:フォーム本文で値を取得する

Contact Form7のフォーム本文で値を取得する。

上記の③で設定したタグ名でフォーム本文に記載する。

フォームに取得した値を表示させたくない場合は、以下のように記載する。

[hidden current_url]

2:確認画面のメールに取得した値を表示させる

表示方法は、他のフォーム項目と同じようにタグ名を記載すれば問題ない。

[current_url]

以上!!!!!!!