8. 初期値・パラメータ連携
URL や別ページから値を渡したい
URL パラメータや別ページのフォームから渡した値を、SPWForm の各入力項目へ反映する方法をまとめています。
方法の選び方
| 方法 | 使えるシチュエーション |
|---|---|
GET + vars | URL パラメータで渡せるから簡単実装。 |
POST + post_key | フォームから値を引き継ぎたい。URLに値が出ないのですっきり。 |
PHP 属性 + vars | PHP で決めた固定値や変数を渡したい。 |
GET + vars でURL パラメータを渡す
vars 属性に {get:キー名} を書くと、URL パラメータの値を取り込めます。パラメータのキー名はHTMLに出ないため、フィールド名との対応を外部から推測されません。
固定ページなどSPWForm設置用ショートコード
[SPWForm_scode key="123" vars="inquiry_type={get:options_val}"]
SPWFormのフォーム内のショートコード
[spwf_select name="contact_type" options="estimate:見積依頼,document:資料請求,other:その他" value="{spwp:inquiry_type}"]
たとえば https://example.com/contact/?options_val=document のように開くと、document に対応する選択肢が初期選択されます。
複数のパラメータを使いたい場合は ,(カンマ)区切りで並べます。
[SPWForm_scode key="123" vars="name_set={get:name_val},kana_set={get:kana_val}"]
[spwf_input name="your_name" value="{spwp:name_set}"]
[spwf_input name="your_kana" value="{spwp:kana_set}"]
WordPress の予約済み変数に注意
WordPress が内部で使っているクエリ変数名は URL パラメータとして使えません。WordPress がページ解釈に使うため、フォームへ届く前に消費されてしまいます。全部で40以上あります。よくぶつかりやすいものを挙げると:
name p s page paged cat tag author feed order orderby year day embed preview
name_val fullname contact_name のように、単語を組み合わせた名前にすれば安全です。完全なリストは WordPress Developer Reference(WP::$public_query_vars) で確認できます。
POST で別ページから渡す
同じ WordPress サイト内の別ページにフォームを置き、method="post" で飛ばす方法です。URL に値が出ないため、長いテキストや見せたくない値の受け渡しに向いています。
POST による自動入力を有効にするには、受け取り側のショートコードに post_key を設定します。post_key を知らない第三者からの POST は無視されます。同一ドメイン内からの POST のみ有効です。
受け取り側の設定(フォームページ)
post_key に任意の秘密キーを設定します。この値はHTMLには出力されません。
固定ページなどSPWForm設置用ショートコード
[SPWForm_scode key="123" post_key="mysecret123"]
post_key は実際は mysecret123 のような単純な値は使わず、推測されにくい文字列を設定してください。
SPWFormのフォーム内のショートコード
[spwf_input name="fullname"]
[spwf_textarea name="content"]
[spwf_radio name="radio01" options="星5つ:星5つ,星4つ:星4つ,星3つ:星3つ"]
[spwf_checkbox name="check01" options="会社員:1,フリーランス:2,主婦:3,学生:4,無職:5"]
送り出し側の設定(/shop/ などのページ)
署名を生成して hidden に含めます。フィールドの name はフォーム側の name 属性と合わせます。チェックボックスの複数選択は name[] で複数送ります。
<?php
$post_key = 'mysecret123'; // 受け取り側の post_key と同じ値を入れます。
$signature = hash_hmac('sha256', date('Y-m-d'), $post_key);
//この2行と下のphpのあるhidden要素が認証に必要です。
?>
<form method="post" action="https://example.com/contact/">
<input type="hidden" name="spwf_prefill_sig" value="<?php echo $signature; ?>">
<input type="hidden" name="fullname" value="田中 太郎">
<input type="hidden" name="content" value="商品についてお聞きしたいことがあります。">
<input type="hidden" name="radio01" value="星4つ">
<input type="hidden" name="check01[]" value="3">
<input type="hidden" name="check01[]" value="5">
<button type="submit">お問い合わせページへ</button>
</form>
POST 受け取り時の動作
post_key未設定 → POST による自動入力は無効。空のフォームを表示。post_key設定あり + 署名一致 → フィールドに初期値をセットして表示。post_key設定あり + 署名不一致 → POST データを破棄して空のフォームを表示。
PHP 側から値を渡す
PHP で do_shortcode() を使って呼び出す場合は、vars に直接値を書くのがシンプルです。
$campaign_slug = 'spring_sale';
echo do_shortcode('[SPWForm_scode key="123" vars="campaign_name_vars=' . $campaign_slug . '"]');
受け取った値は hidden 項目へ反映できます。
[spwf_hidden name="campaign_name" value="{spwp:campaign_name_vars}"]
複数の値を使いたい場合は ,(カンマ)区切りで並べます。
ページエディタで直書きする場合 — {attr:キー名}
WordPress のページ編集画面でショートコードを直書きする場合は、[SPWForm_scode] 自身の属性を {attr:キー名} で参照できます。同じフォーム(同じ key)を複数ページに置いて、ページごとに値を変えたいときに使えます。
たとえばラジオボタンの初期選択値をページごとに変える場合、フォーム定義(管理画面)側は共通のまま:
[spwf_radio name="product" options="商品A:商品A,商品B:商品B,商品C:商品C" value="{spwp:product_set}"]
各ページのショートコードで値だけ差し替えます。
固定ページA
[SPWForm_scode key="123" product="商品A" vars="product_set={attr:product}"]
固定ページB
[SPWForm_scode key="123" product="商品B" vars="product_set={attr:product}"]
初期値を設定しやすいショートコード
text: テキストを最初から入れておきたいとき。hidden: 画面に見せず値だけ送りたいとき。radio: 1つの選択肢を最初から選んでおきたいとき。checkbox: 初期チェックを付けたいとき。select: 選択肢を最初から選んでおきたいとき。
radio checkbox select は、value と options の値を一致させる必要があります。
使い方の例
問い合わせ種別を最初から選んでおく
LP や導線ごとに問い合わせ種別を出し分けたい場合は、URL パラメータから select へ反映する使い方が向いています。
キャンペーン名を hidden で送る
PHP 側で決めた値を hidden へ渡しておくと、メール本文や保存データで後から確認しやすくなります。
別ページから顧客情報を引き継ぐ
商品ページや会員ページから POST でフォームページへ飛ばすことで、ユーザーに入力の手間をかけずに情報を引き継げます。post_key による照合があるため、外部からの不正な POST は無視されます。
ログインユーザー情報を初期値へ使う
{user:user_email} や {meta:first_name} のような参照も使えます。必要な場面だけ使うと整理しやすくなります。
注意点
valueに入れる値は、options側の値と一致している必要があります。checkboxの複数初期値はカンマ区切りで扱います。POST で渡す場合はname="fieldname[]"で複数送ります。- URL パラメータが無い場合、対応する値は空になります。
- URL パラメータのキー名に
namepagesなど WordPress の予約済み変数は使えません。 - POST による自動入力は
post_keyの設定がない場合は無効です。デフォルトで無効になっています。 - POST による自動入力は同一ドメイン内からのみ有効です。別ドメインからの POST は無視されます。