質問編集履歴

2 指摘された内容を追記

keynyon

keynyon score 7

2017/04/18 10:29  投稿

WordPress Contact Form7 チェックボックスのパイプ以前の値をDBに記録したい
いつもお世話になっております。
Contact Form7で、チェックボックス(複数選択可)の選択項目によってメール送信先を振り分けるフォームを作成しております。
「お問い合わせ」フォーム
```
<p>お問い合わせ項目</p>
[checkbox* theme "テーマ1|aaa@sample.co.jp" "テーマ2|bbb@sample.co.jp" "テーマ3|ccc@sample.co.jp"]
```
送信メール内容
```
【お問い合わせ項目】
[_raw_theme]
```
メール送信先
```
[theme]
```
複数のメールアドレスへの振り分けも問題なくできております。
ただ、Contact Form DBに記録される値を「お問い合わせ項目」にしたいのですが
たとえば、「テーマ1」「テーマ2」「テーマ3」を選択した場合、DBに記録される値は
「aaa@sample.co.jp,bbb@sample.co.jp,ccc@sample.co.jp」となってしまいます。
こちらを「テーマ1,テーマ2,テーマ3」と記録させることは可能なのでしょうか?
[こちら](https://wordpress.stackexchange.com/questions/83429/how-to-choose-email-recipient-in-contact-form-7-based-on-address-state-input-in)を参考に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 = 'お問い合わせ';
$fieldName = 'theme';
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');
```
先日、[こちら](https://teratail.com/questions/71727)で解決方法をご教示いただいたのですが、
仕様がチェックボックスに変更になったため、改めて質問させていただきました。
PHPの知識が乏しく、まったく方法がわかりません。
contact form DBにこだわる必要はなく、Excel出力ができれば問題ございませんので
何か他のプラグインや方法がございましたら、ご教示いただけますと幸いです。
(CF7の使用は必須です)
WP ver.4.1.13
Contact Form7 ver.4.1.1
Contact Form DB ver.2.8.35
どうぞよろしくお願いいたします。
どうぞよろしくお願いいたします。
+++++ 追記 +++++
マルチポストのルールについてご指摘いただきました。
Wordpressフォーラムでも同様の質問を投稿をしてしまいましたが、削除ができないため、こちらにリンクを貼ります。
https://ja.wordpress.org/support/topic/wordpress-contact-form7-%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AE%E3%83%91%E3%82%A4%E3%83%97%E4%BB%A5%E5%89%8D%E3%81%AE%E5%80%A4%E3%82%92db%E3%81%AB%E8%A8%98/
解決の際には記載させていただきます。
  • WordPress

    14488 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

1 誤字修正

keynyon

keynyon score 7

2017/04/17 22:01  投稿

WordPress Contact Form7 チェックボックスのパイプ以前の値をDBに記録したい
いつもお世話になっております。
Contact Form7で、チェックボックス(複数選択可)の選択項目によってメール送信先を振り分けるフォームを作成しております。
「お問い合わせ」フォーム
```
<p>お問い合わせ項目</p>
[checkbox* theme class:checkbox use_label_element "テーマ1|aaa@sample.co.jp" "テーマ2|bbb@sample.co.jp" "テーマ3|ccc@sample.co.jp"]
[checkbox* theme "テーマ1|aaa@sample.co.jp" "テーマ2|bbb@sample.co.jp" "テーマ3|ccc@sample.co.jp"]
```
送信メール内容
```
【お問い合わせ項目】
[_raw_theme]
```
メール送信先
```
[theme]
```
複数のメールアドレスへの振り分けも問題なくできております。
ただ、Contact Form DBに記録される値を「お問い合わせ項目」にしたいのですが
たとえば、「テーマ1」「テーマ2」「テーマ3」を選択した場合、DBに記録される値は
「aaa@sample.co.jp,bbb@sample.co.jp,ccc@sample.co.jp」となってしまいます。
こちらを「テーマ1,テーマ2,テーマ3」と記録させることは可能なのでしょうか?
[こちら](https://wordpress.stackexchange.com/questions/83429/how-to-choose-email-recipient-in-contact-form-7-based-on-address-state-input-in)を参考に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 = 'お問い合わせ';
$fieldName = 'theme';
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');
```
先日、[こちら](https://teratail.com/questions/71727)で解決方法をご教示いただいたのですが、
仕様がチェックボックスに変更になったため、改めて質問させていただきました。
PHPの知識が乏しく、まったく方法がわかりません。
contact form DBにこだわる必要はなく、Excel出力ができれば問題ございませんので
何か他のプラグインや方法がございましたら、ご教示いただけますと幸いです。
(CF7の使用は必須です)
WP ver.4.1.13
Contact Form7 ver.4.1.1
Contact Form DB ver.2.8.35
どうぞよろしくお願いいたします。
  • WordPress

    14488 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る