Amazonで商品を見る セール会場へ

Snow Monkey Forms│URLパラメータをお問い合わせフォームに反映する方法

Snow Monkey Formsのフォームに、URLのrefパラメーターを引き継ぐ例です。受信した問い合わせの流入元を見分ける補助情報として使います。

値は英数字・ハイフン・アンダースコアの1〜64文字に限定し、不正な値や未指定の場合は空にします。URLから渡す値は利用者が変更できるため、アクセス権・料金・紹介料の判定には使えません。

フォーム本体の設定はSnow Monkey Formsの設定手順を参照してください。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

フォームにref項目を用意する

テキスト項目を追加し、NAMEをrefにします。パラメーターなしでも送信できるように必須項目にはせず、ラベルは非表示にします。

掲載コードはrefの入力欄とその内容を非表示にします。確認画面、入力画面へ戻る操作、入力エラーによる再表示でも、値と非表示状態を設定し直します。

管理者宛てメールに値を入れる

管理者宛てメール本文に、リファラル: {ref}を記載します。例として、フォームのURL末尾に?ref=suzukiを付けると、refにsuzukiを設定します。

コードを追加する

子テーマのfunctions.phpまたはPHPスニペットのどちらか一方へ追加します。既存のPHP内へ貼る場合は開始タグを追加しません。フォームIDの115は実際のIDに変更してください。

Snow Monkey Forms本体のsnow-monkey-formsスクリプトと一緒に読み込みます。本体を読み込み対象から除外したページや、JavaScriptが動かない環境では反映されません。

add_action( 'wp_enqueue_scripts', function () {
    $script = <<<'JS'
(() => {
  const formId = 'snow-monkey-form-115'; // 実際のフォームIDへ変更
  const raw = new URLSearchParams(window.location.search).get('ref');
  const value = raw && /^[A-Za-z0-9_-]{1,64}$/.test(raw) ? raw : '';
  const applyRef = () => {
    const form = document.getElementById(formId);
    const field = form?.querySelector('input[name="ref"]');
    if (!field) return;
    field.value = value;
    field.type = 'hidden';
    const placeholder = field.closest('.smf-placeholder');
    if (placeholder) placeholder.hidden = true;
  };
  const init = () => {
    const form = document.getElementById(formId);
    if (!form) return;
    ['smf.input', 'smf.back', 'smf.invalid', 'smf.confirm'].forEach((name) => {
      form.addEventListener(name, applyRef);
    });
    applyRef();
  };
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init, { once: true });
  } else {
    init();
  }
})();
JS;
    wp_add_inline_script( 'snow-monkey-forms', $script, 'after' );
}, 11 );

URL・画面・受信メールを照合する

試す入力・操作確認する値と画面
?ref=suzukiを付けて開くrefはsuzuki。入力欄と項目の内容は表示しない
refなしで開くrefは空。任意項目のため、それを理由に送信を止めない
空値・日本語・65文字を渡す許可条件を満たさない値は空にする
確認画面から入力へ戻る値を保持し、refの入力欄を再表示しない
別の必須項目で入力エラーにする再表示後もrefの値と非表示状態を保つ
管理者宛てメールを受信する本文の{ref}が指定値または空として反映されるか照合する

refが画面に現れる場合は、対象フォームのIDとNAMEがコードと一致するか確認します。値が空の場合は、URLのrefが許可文字・1〜64文字の条件を満たすか確認します。英字の大文字・小文字はそのまま保持し、紹介元ごとに表記を決めておきます。

画面で値を確認できても、受信メールに同じ値が入るとは限りません。実際のメール受信が必要な段階では、テスト用の非個人情報の値を1件送信して、管理者宛てメールの設定と本文を照合します。画面の非表示は改ざん防止にはなりません。

2026年10月2日、WordPress 7.1.2・SWELL 2.19.0・SMF 13.0.0の隔離環境で、通常のCSRF検証を使った実HTTPの入力エラー・確認・戻る・完了を確認しました。

確認する操作と適用範囲

通常のページ表示でフォームを開き、ref付きURL、パラメーターなし、不正な値を確認します。確認画面から戻る操作と入力エラーの再表示でも、refが見えず値が残ることを確かめます。

SMF 13.0.0の実際のテキスト項目・フォームブロック・入力/確認/戻る/エラーのコントローラーを使用しました。公式JavaScriptによる項目の差し替えもDOMテストで確認しています。

今回の実HTTP検証では管理者メールの配送直前に本文を捕捉しており、実際の受信箱への到達、Pjaxや遅延挿入されたフォームは未検証です。

URLはログや履歴に残るため、メールアドレスなどの個人情報は入れません。refは参考情報として扱います。

refの確認・戻る・送信を試す

URL末尾に ?ref=campaign_01-A を付けて開き、別の必須欄を空にしたまま確認へ進んで入力エラーを表示します。

必須欄を入力して確認画面へ進み、戻る操作の後でもrefの入力欄や値が見えないことを確かめます。

確認画面から送信し、テスト用の管理者メール本文に campaign_01-A が入ることを照合します。

隔離環境ではこの操作後の生成メールに同じ値が入り、64文字の英字は保持され、未指定・日本語・65文字では空のまま送信が完了しました。

refのラベルも非表示にしたい場合は、フォーム項目側でラベルを非表示にする設定を確認してください。

2026年10月2日の隔離実フォームでrefを非表示にした確認画面
2026年10月2日撮影:合成入力を使った隔離環境の確認画面です(実メールは配送していません)。

元に戻す

追加したコードを停止し、キャッシュを更新します。ref項目やメールの{ref}が不要ならフォーム設定から外します。

  • URLをコピーしました!

実装を任せたい方へ

WordPressのカスタマイズ代行

ブロックの追加、テーマの改修、管理画面の調整など、記事で紹介している内容の実装を承ります。1時間 ¥8,000〜(税込)。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次