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]
以上!!!!!!!