【Contact Form 7】イベントごとにフォームを使い回す方法|隠しフィールド×投稿タイトル連携
Contact Form 7でイベント申込みフォームを作る際、イベントごとにフォームを複製するのは手間がかかります。
本記事では、隠しフィールド(hidden)とカスタム投稿タイプを組み合わせて、「1つのフォームを複数イベントページで使い回す方法」を解説します。
投稿タイトル(イベント名)を自動取得し、メール本文に反映できるため、管理工数の削減にもつながります。
やりたいこと
1つの申込みフォームで、イベントごとに異なる情報を取得し、メールに反映させたいケースがあります。
例えば以下のようなケースです。
- イベントごとにページは分けているが、フォームは共通にしたい
- カスタム投稿でイベントを管理している
- どのイベントからの申込みかをメールで判別したい
実現の仕組み
今回の仕組みは、以下の流れで動作します。
- カスタム投稿タイプ(event)でイベントごとに記事を作成
- 各イベントページに同じフォームを設置
- フォーム送信時に「現在の投稿ID」を取得
- その投稿のタイトル(イベント名)を取得
- hiddenフィールドに値をセット
- メール本文で出力
これにより、「どのイベントページから送信されたか」を自動で判別できます。
カスタム投稿タイプでイベントを作成する
まずはイベント管理用のカスタム投稿タイプを用意します。
例:
・投稿タイプスラッグ:event
・投稿タイトル:2026年4月26日(日):最近読んだ本を持ち寄る交流会
この「投稿タイトル」が、そのままイベント名として使用されます。

Contact Form 7 に隠しフィールドを追加する
次に、フォームに隠しフィールドを追加します。

|
1 |
[hidden event-name] |
※hiddenフィールドの名前(event-name)は、メール本文で使用するタグ名([event-name])と一致させる必要があります。
このフィールドは画面には表示されませんが、フォーム送信時のデータとしてサーバーに送られます。
そのため、ユーザーに見せずに「イベント名」などの情報を保持する用途に適しています。
※ユーザーにイベント名を表示したい場合は、以下のようにフォーム外に表示する方法もあります。
▼ single-event.php
|
1 |
<h2 class="event-title"><?php the_title(); ?></h2> |
メール本文にイベント名を反映する
メール設定の「題名」や「メッセージ本文」に、以下のようにタグを追加します。

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
題名 【[_site_title]】イベント【[event-name]】より応募がありました メッセージ本文 差出人: [your-name] [your-email] [your-name] 様より応募がありました。 以下、入力内容です。 ============ イベント名:[event-name] 氏名:[your-name] |
[event-name] を記述することで、hiddenフィールドの値を出力できます。
functions.phpで投稿タイトルを動的にセットする
フォーム送信時に、現在表示している投稿のタイトル(イベント名)を取得し、
hiddenフィールドにセットします。
以下のコードを functions.php に追加します。
※テーマのfunctions.phpを編集するため、事前にバックアップを取っておくことをおすすめします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
add_filter('wpcf7_posted_data', function($posted_data) { // フォームが設置されている投稿IDを取得 if (empty($_POST['_wpcf7_container_post'])) { return $posted_data; } $post_id = (int) $_POST['_wpcf7_container_post']; // event投稿タイプのみ対象にする if (get_post_type($post_id) !== 'event') { return $posted_data; } // 投稿タイトルをhiddenフィールドにセット $posted_data['event-name'] = get_the_title($post_id); return $posted_data; }); |
ポイント
・フォーム送信時に実行されるフィルターを使用
・_wpcf7_container_post で「現在の投稿ID」を取得
・投稿タイプが event の場合のみ処理を行う
・投稿タイトルを event-name にセット
これにより、各イベントページごとに自動で値が切り替わります。
動作確認のポイント
実装後は以下を確認します。
- イベントページ(event投稿)から送信しているか
- メールに正しくイベント名が表示されるか
- 通常の投稿や固定ページでは値が入らないか(影響が出ないか)
まとめ
Contact Form 7 の隠しフィールドを活用することで、
- フォームを1つに統一できる
- イベントごとの情報を自動取得できる
- 管理・運用コストを削減できる
といったメリットがあります。
イベント管理やセミナー申込みフォームなど、
- イベントごとにページは分けたい
- フォームは1つに統一したい
という場合に非常に有効な方法です。
![MARKLEAPS[マークリープス]](https://markleaps.com/blog/wp-content/themes/mkl/images/00_logo.png)