web-dev-qa-db-ja.com

フォームに入力された住所状態に基づいてContact Form 7で電子メール受信者を選択し、データベースに保存する方法

Contact Form 7を使用

状況

訪問者がWebサイトのフォームに記入すると、次のように入力します。

  • Eメール
  • 電話
  • 住所(通り、市、州、郵便番号)
  • メッセージ

今後の参照のためにこの情報をデータベースに保存する必要があり、中央のメールアドレスと特定のメールアドレスにメールを送信する必要があります。これは訪問者の状態によって変わります。

基本的に、営業担当者にはテリトリーがあり、Webサイトからの連絡先は、メインWebサイトの電子メールアドレスとテリトリーの担当者に送信する必要があります。

すべての州に営業担当者が割り当てられているわけではありません。

取られたステップ

Contact Form DB をインストールして、すべての送信をデータベースに保存しました。

Contact Form 7 Webサイトに記載されている方法を使用して、受信者を選択しています- パイプで選択可能な受信者 。州名を選択可能なドロップダウンとして使用し、パイプに続く営業担当者の電子メールアドレスを使用しています。

[select* state 
"Alabama|[email protected]"
"Alaska"
"Arizona|[email protected]"
"Arkansas|[email protected]"
"California|[email protected]"
"Colorado"
]

CF7の「メール」を設定して、Webサイトの中央の電子メールアドレスと、選択した状態で動作する営業担当者の電子メールアドレスに送信します。

[email protected],[state]

問題

訪問者が営業担当者が割り当てられた州を選択すると、営業担当者のメールアドレスが州ではなくデータベースに入力されます。

訪問者が指定された営業担当者のいない州名を選択すると、州名はデータベースに入力されますが、電子メールは送信されません。

また、[email protected]に送信する「メール」と[state](営業担当者のメールアドレス)に送信する[メール(2)]を設定しようとしましたが、[email protected]にメールは送信されませんプルダウンの州名にメールアドレスが指定されていません。

最後に、"Alaska|"という形式で州名を入力してみました。この場合、stateのデータベースには何も入力されず、電子メールは送信されませんでした。上記の「メール」オプションの両方を使用してこれをテストしました。

ソリューション?

これで、営業担当者を指定しなくても、すべての州名に[email protected]を入力できるようになりました。これで問題ありません。

これに関する問題-電子メールアドレスはstateのデータベースにまだ入力されています。

状態名([_raw_state])を取得し、非表示のCF7フィールドに渡す方法が必要だと思います。そのため、データベースに保存できますが、どうすればよいかわかりません。

3
Travis Pflanz

Contact Form DBのMichael Simpsonに感謝します。解決策は、Contact Form DBのWebサイトの記事にリストされています(非表示のようなものです)。 - パイプ付きのCF7メニュー

Functions.phpに追加する

function myFilter($formData) {
// Change $formData
return $formData; // be sure to return it
}

add_filter('cfdb_form_data', 'myFilter');

function location_form_handler($formData)
{
$formName = 'ExtendedContact'; // change this to your form's name
$fieldName = 'state'; // change this to your field's name
if ($formData && $formName == $formData->title && $formData->scanned_form_tags) {
    $emailSelected = $formData->posted_data[$fieldName];
    $valueSelected = null;
    foreach ($formData->scanned_form_tags as $tag) {
        if ($tag['name'] == $fieldName) {
            foreach ($tag['raw_values'] as $rawValue) {
                // value|email
                $valuesArray = explode('|', $rawValue);
                if (count($valuesArray) == 2 && $valuesArray[1] == $emailSelected) {
                    $valueSelected = $valuesArray[0];
                    break;
                }
            }
        }
        if ($valueSelected != null) {
            break;
        }
    }
    if ($valueSelected != null) {
        $formData->posted_data[$fieldName] = $valueSelected;
        $formData->posted_data[$fieldName . '_email'] = $emailSelected;
    }
}
return $formData;
}
add_filter('cfdb_form_data', 'location_form_handler');

これにより、状態名(パイプの前のフィールド)がstate、関連する電子メールアドレスがstate_emailの2番目のフィールド(パイプの後の電子メールアドレス)でデータベースにエントリが作成されます。

最後に、Contact Form 7のフォーム定義を次のように更新します。[state_email]

_ note _

他の誰かがこの状況に遭遇した場合のために、私はまた言及したい -

私のフォームでは、フォームに記入した訪問者が居住する都道府県を選択し、次にその都道府県を担当する販売員がEメールを受信します。同様に、私はその電子メールを中央の(企業の)電子メールアドレスに送信する必要がありました。

しかし、すべての州が割り当てられた販売員を持っているわけではなく、会社は中西部に焦点を当てています。

Contact Form 7では、パイプの後のEメールアドレスが空の場合、Eメールはまったく送信されません。 Michaelによって概説された方法は、実際にはパイプの後に空のフィールドを許可します。

私は中央の電子メールに送るためのフォームの "Mail"と(もしあれば)販売員に送るための "Mail(2)"を設定しました。

2
Travis Pflanz