Contact Form 7で遷移元ページの情報をフォームに渡す方法【求人サイト例】

公開日
最終更新日
Contact Form 7 遷移元の情報をフォームに渡す

求人サイトの「エントリー」ボタンを押したら、応募フォームにその求人名が最初から入力されている——ユーザーの手間を減らす、よくある仕組みです。Contact Form 7でも、遷移元ページの情報をフォームに引き継げます。

結論から言うと、遷移元ページからhiddenフィールドでデータをPOST送信し、functions.phpwpcf7_form_tagフィルターで、その値をContact Form 7のフォームタグに流し込むという流れで実現できます。この記事では、求人サイトのエントリーフォームを例に、具体的なコードを解説します。

やりたいこと

たとえば、求職者向けのお仕事紹介サイトを制作したとします。お仕事情報をカスタム投稿(投稿タイプ名:job)で作り、そのシングルページに「エントリー」ボタンを設置します。

このボタンを押して遷移した先のエントリーフォームに、遷移元ページの「お仕事名」などを、あらかじめ入力された状態で表示する、というのが今回のゴールです。

遷移元ページ:hiddenで値を渡す

まず、遷移元となるシングルページ(single-job.php)に、エントリーボタンを兼ねたフォームを設置します。渡したい値はhiddenフィールドに入れ、フォーム本体(/entry/ページ)へPOSTで送ります。

<form class="entry-btn" action="<?php echo home_url(); ?>/entry/" method="post">
        <input type="hidden" name="entry-ttl" value="<?php the_title(); ?>">
        <input type="hidden" name="entry-number" value="<?php the_field('job_number', $post->ID); ?>">
        <input type="submit" value="エントリー">
</form>

この例では、カスタム投稿のタイトル(the_title())をentry-ttlに、カスタムフィールドjob_numberの値をentry-numberに入れて送っています。entry-ttlentry-numberは、あとで設定するContact Form 7のフォームタグ名に合わせておきます。

フォーム側:functions.phpで値を受け取る

次に、送られてきた値をContact Form 7のフォームタグにセットします。functions.phpに、wpcf7_form_tagフィルターを使った処理を追加します。

function recform_data_filter($tag)
{
    if (!is_array($tag))
        return $tag;

    if (isset($_POST['entry-ttl'])) {
        if ($tag['name'] == 'entry-ttl')
            $tag['values'] = (array) $_POST['entry-ttl'];
    }
    if (isset($_POST['entry-number'])) {
        if ($tag['name'] == 'entry-number')
            $tag['values'] = (array) $_POST['entry-number'];
    }

    return $tag;
}
add_filter('wpcf7_form_tag', 'recform_data_filter');

entry-ttlentry-numberは、Contact Form 7のフォームタグの名前です。フォーム側でこの名前のタグ(たとえば[text* entry-ttl])を用意しておけば、遷移してきたときに値が入った状態で表示されます。

コードのポイント

仕組みはシンプルです。wpcf7_form_tagフィルターは、Contact Form 7が各フォームタグを生成するタイミングで呼ばれます。そのとき、タグ名($tag['name'])が渡したい項目と一致していれば、POSTで送られてきた値を$tag['values']にセットする、という流れです。

渡したい項目が増えたときは、同じifブロックを項目名を変えて追加していけば対応できます。カスタム投稿のタイトルやカスタムフィールドなど、遷移元で取得できる値であれば、基本的に何でも引き継げます。

補足として、受け取った値はフォームの初期値として表示されるため、ユーザーに編集させたくない場合は、フォームタグ側でreadonlyを指定しておくとよいでしょう。応募する求人名のように「変更されては困る情報」は、読み取り専用にしておくと安心です。また、確認画面つきのフォームと組み合わせれば、引き継いだ値をそのまま確認ページや自動返信メールにも反映できます。

1点、セキュリティ面の補足です。$_POSTの値はユーザー側から送られてくるため、そのまま扱う前にsanitize_text_field()などでサニタイズしておくと、より安全です。フォームに表示する値は、信頼せずに一度整える——この習慣を持っておくと安心です。

まとめ

  • 遷移元ページからhiddenフィールドで値をPOST送信する
  • functions.phpwpcf7_form_tagフィルターで、フォームタグに値をセットする
  • hiddennameとフォームタグ名を一致させるのがポイント
  • $_POSTの値はサニタイズしてから扱うと安全

遷移元の情報をフォームに引き継げると、ユーザーは「どの求人に応募するか」を選び直す手間がなくなり、離脱も減らせます。求人サイトに限らず、商品や店舗の問い合わせフォームなど、応用の幅が広いテクニックです。

IPPEI FUKUTA(株式会社バッズブルー 代表)

IPPEI FUKUTA(株式会社バッズブルー 代表)

WordPress専門のWeb制作者として15年・150サイト以上を担当。現場でつまずいた問題と解決策を、同じ制作者・フリーランスの方に向けて発信しています。無料のWeb便利ツール集「バドツール」を開発・運営中。