サポート » プラグイン » Contact Form DBで、パイプ文字以降の値を取得する方法

  • 解決済 keynyon

    (@keynyon)


    お世話になっております。

    Contact Form7で、選択項目によってメール送信先を分岐するフォームを作成しております。

    「お問い合わせ」フォームに記述しているコードは以下のようなものです。
    [radio group use_label_element "お問い合わせ内容1|aaa@xxx.co.jp" "お問い合わせ内容2|bbb@xxx.co.jp" "お問い合わせ内容3|ccc@xxx.co.jp"]

    自動送信メールへの記述
    [_raw_group]

    以前別スレッドにてご教示いただき、ここまでは問題なくできました。
    参考:
    https://contactform7.com/ja/selectable-recipient-with-pipes/

    ただ、Contact Form DBには、パイプ文字以降(この場合は、メールアドレス)が記録されてしまいます。

    http://wordpress.stackexchange.com/questions/83429/how-to-choose-email-recipient-in-contact-form-7-based-on-address-state-input-in
    こちらを参考に、functions.phpを編集してみたのですが、やはりパイプ文字前の値が記録できません。

    functions.phpへの記述

    function form_with_pipes_handler($formName, $fieldName, $newFieldName, &$formData)
    {
        if ($formData &&
                $formName == $formData->title &&
                property_exists($formData, 'WPCF7_ContactForm') &&
                method_exists($formData->WPCF7_ContactForm, 'form_scan_shortcode')) {
     
            $scanned_form_tags = $formData->WPCF7_ContactForm->form_scan_shortcode();
            $emailSelected = $formData->posted_data[$fieldName];
            if (is_array($emailSelected) && count($emailSelected) == 1) {
                $emailSelected = $emailSelected[0];
            }
            $valueSelected = null;
            foreach ($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[$newFieldName] = $emailSelected;
            }
        }
        return $formData;
    }
    function location_form_handler($formData) // Use a different function name for each form
    {
        $formName = 'お問い合わせ';
        $fieldName = 'group';
        $newFieldName = $fieldName . '_email';
        return form_with_pipes_handler($formName, $fieldName, $newFieldName, $formData);
    }
    add_filter('cfdb_form_data', 'location_form_handler');

    Contact Form7のバージョンは4.1.1です。

    仕方なく、jqueryでhiddenフィールドに分岐したメールアドレスを出力して、
    それを取得する方法を取っているのですが、スマートなやり方とは思えず・・
    正しい方法はございますでしょうか?

    どなた様かご教示いただけますと幸いです。
    どうぞよろしくお願いいたします。

    • このトピックはkeynyonが7年前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック投稿者 keynyon

    (@keynyon)

    大変失礼いたしました。
    訂正いたします。

    タイトル「Contact Form DBで、パイプ文字以降の値を取得する方法」とありますが「パイプ文字前の値」の誤りです。

    どうぞよろしくお願いいたします。

    トピック投稿者 keynyon

    (@keynyon)

    内容が変更になりましたので、一旦解決済みにし、改めて質問させていただきます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「Contact Form DBで、パイプ文字以降の値を取得する方法」には新たに返信することはできません。