Contact Form 7で「エリア別メール振り分け」

  • URLをコピーしました!
目次

はじめに

こんにちは!
今回はWordPressの定番お問い合わせフォームプラグイン「Contact Form 7」で、選択したエリアごとに管理者宛の送信先を振り分ける方法と、うまく動かない時のエラーログ活用法・配列処理の注意点について、初心者エンジニアさん向けに解説します。

私自身も実際にハマったポイントを交え、実務で役立つ情報をまとめました!


こんな人におすすめ

  • WordPressでContact Form 7を使い、選択肢によってメール送信先を切り替えたい
  • functions.phpをカスタマイズしたけどうまく動かない
  • エラーログで原因調査したい

1. 目的:「エリアによって管理者メールの送信先を変えたい!」

サイトの問い合わせフォームで、
「東日本を選んだら東日本支社へ」「西日本を選んだら西日本支社へ」
といったエリア別の担当者に自動で通知が届く仕組みを作りたい、というケースは多いですよね。

Contact Form 7標準機能だけだと、メールの送信先は固定なので、
functions.phpにフィルターフックを書いてカスタマイズする必要があります。


2. Contact Form 7のカスタマイズサンプルコード

まずは実際にやったカスタマイズ例をご紹介します。

▼ フォームタグ例

[select* your-area "東日本支社" "中日本支社" "西日本支社"]

▼ functions.phpに記述するコード

add_action('wpcf7_before_send_mail', 'custom_change_mail_recipient');
function custom_change_mail_recipient($contact_form)
{
    $submission = WPCF7_Submission::get_instance();
    if ($submission) {
        $posted_data = $submission->get_posted_data();
        $area = isset($posted_data['your-area']) ? $posted_data['your-area'] : '';
        
        // 配列対応
        if (is_array($area)) {
            $area = $area[0];
        }

        $to = 'default@example.com'; // デフォルト

        if ($area === '東日本支社') {
            $to = 'east@example.com';
        } elseif ($area === '中日本支社') {
            $to = 'central@example.com';
        } elseif ($area === '西日本支社') {
            $to = 'west@example.com';
        }

        $mail = $contact_form->prop('mail');
        $mail['recipient'] = $to;
        $contact_form->set_properties(['mail' => $mail]);
    }
    return $contact_form;
}

3. まさかの落とし穴!値が判定できない?

フォームもコードも間違っていないはずなのに、
「なぜかどのエリアを選んでもデフォルトのアドレスにしか届かない…」
というトラブルが発生しました。


4. エラーログで値を確認してみよう

そんな時におすすめなのが「サーバーのエラーログを見ること」です。

▼ 変数の中身を出力

error_log('your-area: ' . print_r($area, true));

この1行を挟むことで、どんな値が入っているのかサーバーのエラーログで確認できます。

▼ エラーログに出た内容

your-area: Array

「Array」と出ている場合、
**$areaの中身が配列(Array)**であることが分かります。


5. Contact Form 7はselectの値が配列で返ることがある

「multiple」を指定していなくても、
テーマや環境、プラグイン干渉などの影響で単一選択でも値が配列で渡ってくるケースがあると分かりました。


6. 配列対応の処理で解決!

そこで、下記のように「配列かどうかを判定し、配列なら最初の1つを取り出す」処理を追加しました。

if (is_array($area)) {
  $area = $area[0];
}

この一行で、単一選択でも配列でも安全に値が判定できるようになり、
無事にエリアごとに管理者への通知メールが届くようになりました!


7. 学びとまとめ

  • トラブル時はサーバーのエラーログを確認することで「変数の中身」や「エラーの発生場所」が見えてくる
  • Contact Form 7のフォーム値は「配列」になっていることもあるので注意
  • 初心者でも怖がらずにエラーログを活用&is_arrayのチェックを追加すればバッチリ!

おわりに

今回はContact Form 7の「エリア別メール振り分け」と、エラーログを活用した原因調査・配列処理の重要性についてまとめました。

記事のご利用やアレンジはご自由にどうぞ!


よかったらシェアしてね!
  • URLをコピーしました!
目次