ラッコサーバー

ラッコサーバーでサイトを管理すると売却時の価値を高く保てます!
サイト/ドメインの売却をシームレスに実現します。

ラッコサーバー詳細
オンライン事業売買
WordPressサイト売買
ドメイン売買
データを読み込み中...
データを読み込み中...
データを読み込み中...

【WordPress】選択内容に応じて送信先をコピペで振り分ける方法(Contact Form 7)

CF7で送信先を振り分けたい!選択内容に応じて自動で切り替えたいけど、標準設定だけじゃできないみたい…

「お問い合わせ種別」のドロップダウンで「営業」「サポート」を選んでもらい、選んだ内容に応じて送信先メールアドレスを自動で変えたい——Contact Form 7(CF7)のよくあるニーズです。

標準機能だけじゃ振り分けられなくて、正直困ってるんだよね…

PHPのフックを使えば、選択内容に応じた送信先の振り分けが実現できますよ。コードはコピペでOKです。

この記事を読むと、以下のことができるようになります。

  • お問い合わせ種別の選択内容に応じて送信先メールアドレスを自動で振り分ける
  • コードを安全に追加できるWPCodeの使い方が分かる
  • 振り分けが届かない・うまく動かないときの対処法が分かる
動作確認環境

WordPress 7.0 + Contact Form 7(WordPress.org公式) v6.1.6 + WPCode(WordPress.org公式) v2.3.6 で動作確認済み(2026年7月時点)。

ラッコサーバー

ラッコサーバーでサイトを管理すると売却時の価値を高く保てます!
サイト/ドメインの売却をシームレスに実現します。

ラッコサーバー詳細
オンライン事業売買
WordPressサイト売買
ドメイン売買
データを読み込み中...
データを読み込み中...
データを読み込み中...

目次

なぜContact Form 7の標準機能では送信先を振り分けられないのか

結論から言うと、Contact Form 7の標準機能だけでは「選択内容に応じて送信先を切り替える」ことはできません。

CF7のメール設定には「宛先」を入力する欄が1つあるだけで、条件によって宛先を分岐させる仕組みは用意されていないからです。

そこで本記事では、PHPのフックを使ってサーバー側で送信先を制御する方法を解説します。

メール設定の「宛先」欄にフォームの値を直接入れてはいけない理由

「宛先」欄に [routing-category] のようなフォームフィールドの値を直接入れれば振り分けできそうに見えますが、これは絶対に避けてください。

ユーザーが入力した値がそのまま宛先になるため、悪意のある第三者が任意のメールアドレスを指定できてしまいます。スパムメールの踏み台(メールヘッダーインジェクション)にされる危険があります。

注意

メール設定の「宛先」欄に、フォームのフィールド値([routing-category] など)をそのまま入れてはいけません。任意のアドレスへ送信できる状態になり、スパムの踏み台にされるリスクがあります。送信先の振り分けは、必ずサーバー側のコード(フック)で制御してください。

送信先を振り分ける仕組みの全体像

送信先の振り分けは、次の3ステップで実現します。

  • STEP1:お問い合わせ種別の選択項目をフォームに追加する
  • STEP2:WPCodeで送信先を振り分けるコードを追加する
  • STEP3:テスト送信で振り分けを確認する

選んだ種別の値をコード側で受け取り、対応する宛先メールアドレスに書き換える、という流れです。

使用するフック「wpcf7_before_send_mail」とは

wpcf7_before_send_mail は、CF7がメールを送信する直前に処理を差し込めるフック(アクションフック)です。

このタイミングでフォームの入力内容を読み取り、宛先(to)を上書きすることで、選択内容に応じた振り分けが実現できます。ユーザーの入力をそのまま宛先にするのではなく、コード側で用意した安全なアドレス一覧から選ぶのがポイントです。

入力値そのものを宛先にするのではなく、「営業について」という”キー”に対応する宛先をコード側で決めておくのが安全のコツですよ。

STEP1:お問い合わせ種別の選択項目をフォームに追加する

まずは、振り分けの基準になる「お問い合わせ種別」の選択項目をフォームに追加します。

選択肢とフィールド名(name属性)を決める

CF7のフォーム編集画面で、ドロップダウン(メニュー)のタグを追加します。フィールド名は routing-category とし、選択肢を以下のように設定します。

[select routing-category "営業について" "サポートについて" "その他"]

ここで決めたフィールド名(routing-category選択肢のテキストは、後ほどコード側で完全に一致させる必要があります。コピペで進める場合はこのまま使ってください。

Contact Form 7フォーム編集画面—追加した「routing-category」選択項目のタグ
▲ CF7のフォーム編集画面に「routing-category」の選択項目タグを追加したところ(赤枠が追加した行)
MEMO

選択肢のテキスト(「営業について」など)は、STEP2のコード内の振り分けリストと一字一句一致させる必要があります。全角・半角やスペースの違いにも注意してください。

STEP2:WPCodeで送信先を振り分けるコードを追加する

次に、PHPコードを安全に追加できるプラグイン「WPCode」を使って、振り分け処理を追加します。

WPCodeのインストールと有効化

WordPress管理画面の「プラグイン」→「新規プラグインを追加」で WPCode を検索します。検索結果に表示されたWPCodeの「今すぐインストール」ボタンをクリックし、インストールが終わったら「有効化」します。

プラグイン新規追加の検索結果画面—WPCodeの「今すぐインストール」ボタン
▲ プラグインの検索結果でWPCodeの「今すぐインストール」ボタン(赤枠)をクリックする

正式名称は「WPCode – Insert Headers and Footers + Custom Code Snippets」です。functions.php を直接編集するより安全にコードを管理できるため、初心者の方にもおすすめです。

functions.php を直接いじると、書き間違いで画面が真っ白になることもあります。WPCodeならエラー時に自動で停止してくれるので安心ですよ。

振り分けコードを貼り付ける(コピペOK)

WPCodeの「コードスニペット」→「新規追加」に進み、「カスタムコード (新規スニペット) を追加」を選びます。すると「スニペットのコードタイプを選択してください」というモーダルが開くので、「PHP スニペット」を選択します。

WPCode新規スニペット作成画面—「PHP スニペット」の選択
▲ コードタイプの選択画面で「PHP スニペット」(赤枠)を選ぶ

コードタイプを選んだら、編集画面に以下のコードを貼り付けてください。

add_action('wpcf7_before_send_mail', function($cf7) {
    $submission = WPCF7_Submission::get_instance();
    if (!$submission) return;

    $posted_data = $submission->get_posted_data();
    $subject = isset($posted_data['routing-category']) ? $posted_data['routing-category'] : '';

    $mail = $cf7->prop('mail');

    $routing = [
        '営業について' => 'sales@your-domain.com',
        'サポートについて' => 'support@your-domain.com',
        'その他' => 'info@your-domain.com',
    ];

    if (isset($routing[$subject])) {
        $mail['to'] = $routing[$subject];
        $cf7->set_properties(['mail' => $mail]);
    }
});

$routing 配列の左側(キー)がフォームの選択肢、右側が送信先メールアドレスです。実際のメールアドレスに書き換えて使ってください。選択肢を増やしたい場合は、この配列に1行追加するだけです。

注意

$routing 配列のキー(左側)は、STEP1で設定した選択肢のテキストと完全に一致させてください。1文字でも違うと振り分けが効かず、CF7のメール設定にある初期の宛先へ送信されます。

コードを保存して有効化する

コードを貼り付けたら、挿入方法は「自動挿入」「サイト全体」のままで問題ありません。

画面右上のトグルが「無効」になっているので、これをクリックして有効に切り替えます。最後に「スニペットを保存」をクリックすれば完了です。

WPCodeスニペット編集画面—有効化トグルと「スニペットを保存」ボタン
▲ 有効化トグル(赤枠左)を切り替えてから「スニペットを保存」(赤枠右)をクリックする

STEP3:テスト送信で振り分けを確認する

設定が終わったら、実際にフォームから送信してテストします。

選択肢ごとに送信し、それぞれ正しい宛先(営業・サポート・その他)に届くかを確認しましょう。最低でも全パターンを1回ずつテストするのがおすすめです。

「営業について」を選んで送ったら sales@ に、「サポートについて」なら support@ に届けばOK!

振り分けが届かない・反映されないときのチェックポイント

うまく振り分けられないときは、以下を順番に確認してください。

  • 選択肢のテキストとコードのキーが一致しているか:全角・半角、スペースの有無まで確認する
  • フィールド名が routing-category になっているか:フォーム側とコード側でズレていないか
  • WPCodeのスニペットが「有効」になっているか:保存だけで有効化を忘れていないか
  • そもそもメール自体が届いているか:振り分け以前にメールが送れていない場合はサーバーのメール設定を疑う
MEMO

すべての選択肢で「初期の宛先」にしか届かない場合は、選択肢テキストとコードのキーの不一致が原因であるケースがほとんどです。コピペで揃えると確実です。

💡 振り分けたメールがちゃんと届く環境になっていますか?

送信先の振り分け設定が正しくても、サーバーのメール環境が整っていないと、せっかくのお問い合わせが迷惑メールフォルダに埋もれてしまうことがあります。

ラッコサーバーなら、SPF・DKIMといった送信ドメイン認証に標準対応し、独自SMTPも利用可能。WordPressからのメール到達率を高い水準で保てます。

月額330円(税込)〜30日間の無料お試しもあるので、メールが届かない悩みごと解決したい方はぜひお試しください。

よくある質問

Q1. ドロップダウンではなくラジオボタンやチェックボックスでも振り分けできますか?

A. できます。get_posted_data() で取得できるフィールドであれば形式は問いません。チェックボックスは値が配列になる点だけ注意してください。

Q2. 1つの選択につき複数のアドレスへ同時に送りたい場合はどうすればいいですか?

A. 宛先はカンマ区切りで複数指定できます。$mail['to'] = 'a@example.com, b@example.com'; と記述すれば同時送信が可能です。単に複数の固定アドレスへ常に送りたいだけの場合は、条件分岐は不要です。詳しくは送信先を複数のメールアドレスに設定する方法も参照してください。

Q3. 送信先だけでなく、自動返信メール(メール2)の内容も振り分けられますか?

A. 振り分けられます。$mail_2 を同様に取得・上書きすることで、選択内容に応じて自動返信の内容も変えられます。

Q4. コードを書かずに送信先を振り分けられるプラグインはありますか?

A. 無料かつ確実な方法は、本記事で紹介したWPCode+フックのアプローチです。CF7の標準機能だけでは振り分けはできないため、何らかの追加実装が必要になります。

Q5. 振り分けたメールが迷惑メールに入ってしまいます。どうすればいいですか?

A. サーバーのSPF/DKIM設定が未対応だと迷惑メール判定されやすくなります。SMTPプラグインの導入や、メール認証に対応したサーバー環境への移行で到達率を改善できます。なお、振り分け以前にメールが届かない場合は、上のSTEP3のチェックポイントも合わせて確認してください。

Q6. 条件分岐は不要で、単純に送信先のメールアドレス自体を変更したいだけの場合は?

A. その場合はコードを書く必要はありません。CF7のメール設定画面にある「宛先」欄を直接書き換えるだけで完了します。詳しい手順は送信メールの宛先・件名・本文をカスタマイズする方法で解説しています。

Q7. Contact Form 7自体の基本的な使い方が分からない場合は?

A. Contact Form 7は、プラグインをインストール・有効化してフォームを作成し、生成されたショートコードを固定ページや投稿に貼り付けるだけで設置できます。本記事は送信先の振り分け設定に特化しているため、フォーム作成の基本手順は管理画面の「Contact Form 7」→「新規追加」から確認してください。

まとめ

Contact Form 7で選択内容に応じて送信先を振り分ける方法を解説しました。ポイントは以下の通りです。

  • CF7の標準機能だけでは送信先の振り分けはできない
  • 「宛先」欄にフォームの値を直接入れるのはセキュリティ上NG
  • wpcf7_before_send_mail フックを使い、WPCodeでサーバー側から安全に制御する
  • 選択肢のテキストとコードのキーを完全に一致させるのが成功のコツ

コピペで設定できるので、ぜひお問い合わせフォームの運用に役立ててください。