質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

Q&A

解決済

1回答

3420閲覧

WordPress Contact Form DBでチェックボックスのパイプ前の値を取得したい

keynyon

総合スコア7

WordPress

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

0グッド

0クリップ

投稿2017/04/07 13:18

編集2017/04/17 12:45

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

Contact Form7で、選択項目によってメール送信先を振り分けるフォームを作成しております。
メールの振り分けは問題なくできております。

「お問い合わせ」フォーム

<p>お問い合わせ項目</p> [radio category "項目1|aaa@sample.co.jp" "項目2|bbb@sample.co.jp" "項目3|ccc@sample.co.jp"]

送信メール内容

【お問い合わせ項目】 [_raw_category]

メール送信先

[category]

ただ、Contact Form DBに記録される値を「お問い合わせ項目」にしたいのですが、メールアドレスになってしまいます。
項目名を登録する方法はございますでしょうか。
WordPress Development
こちらを参考に、functions.phpに以下のとおり記述を加えたのですが、やはりDBにお問い合わせ項目は追加されませんでした。(コピペですがすみません・・)

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 = 'category'; 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');

PHPの知識が乏しく、記述に間違いがあるかもしれません。
ご教示いただけますと幸いです。

WP ver.4.1.13
Contact Form7 ver.4.1.1
Contact Form DB ver.2.8.35

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

real

2017/04/12 00:48

なんらかのエラーが出るのでしょうか?それとも何も変化がありませんか?
keynyon

2017/04/12 01:46

realさま ご連絡ありがとうございます。エラーは出ず、何も変化がありません。ご教示いただけますと幸いです。どうぞよろしくお願いいたします。
real

2017/04/17 10:46

別の質問を立てられるのが良いと思いますよ。
keynyon

2017/04/17 12:29

realさま 大変失礼いたしました。ご指摘ありがとうございます。解決済みにさせていただきます。
guest

回答1

0

ベストアンサー

何も変化がないということは、フィルターが処理されていないか、中のif文で弾かれてしまっている可能性もありますね。

一度、以下のif文の直前でvar_dump($formData); exit;としてみてください。

if ($formData && $formName == $formData->title && $formData->scanned_form_tags) {

$formData->title$formData->scanned_form_tagsが存在しなかったり、意図しない値が入っていたりしないでしょうか。

差し支えなければ、出力を追記していただけると解決できるかもしれません。


スマートではないですが、以下のように書き換えるとうまく入るかもしれません。
以下のコードでは、特定のメールアドレスが送信されたときに、その値を好きなテキストに書き換えています。

php

1function location_form_handler($formData){ 2 $formName = 'お問い合わせ'; 3 $fieldName = 'category'; 4 if($formData && $formName == $formData->title && isset($formData->posted_data[$fieldName][0])){ 5 $email = $formData->posted_data[$fieldName][0]; 6 $text = 'その他'; 7 switch($email){ 8 case 'aaa@xxx.co.jp': 9 $text = '項目1'; 10 break; 11 case 'bbb@xxx.co.jp': 12 $text = '項目2'; 13 break; 14 case 'ccc@xxx.co.jp': 15 $text = '項目3'; 16 break; 17 } 18 $formData->posted_data[$fieldName][0] = $text; 19 } 20 return $formData; 21} 22add_filter('cfdb_form_data', 'location_form_handler');

投稿2017/04/12 10:15

編集2017/04/14 12:02
real

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keynyon

2017/04/13 02:44

realさま ご教示いただきありがとうございます。 var_dump($formData); exit; を追記したところ、送信ボタンを押下後、ロードしたままとなり、送信できませんでした。 >$formData->titleや$formData->scanned_form_tagsが存在しなかったり、意図しない値が入っていたりしないでしょうか。 >差し支えなければ、出力を追記していただけると解決できるかもしれません。 すみません、本当にphpの知識がなく、ほぼコピペで対応しているものでして、ご質問の意味が理解できません・・ 大変恐れ入りますが、引き続きご教示いただけますと幸いです。 どうぞよろしくお願いいたします。
real

2017/04/13 11:14

> 送信ボタンを押下後、ロードしたままとなり、送信できませんでした。 ということは、非同期通信だったのですね! この場合、エラーが出ていても裏側で出ているので、ボタンを押している表側ではそれを確認できていない可能性があります。 ブラウザの開発者ツールを開いて、レスポンスの中身を見ることは可能でしょうか? ちなみにvar_dump($formData); exit;というのは、$formDataの中身を全て表示して終了する、という意味です。 終了しているので、期待するレスポンスが返ってこなくなりボタンがロード中のままになるということは、location_form_handler()という関数がきちんと実行されているということです。
keynyon

2017/04/14 01:56

realさま ご教示いただきありがとうございます。 >ブラウザの開発者ツールを開いて、レスポンスの中身を見ることは可能でしょうか? すみません、こちらは開発者ツールのどこを確認すればよいでしょうか・・? 知識不足で本当に申し訳ございません。。 Chrome、またはFireFoxを使用しております。 度々申し訳ございませんが、ご教示いただけますと幸いです。 どうぞよろしくお願いいたします。
real

2017/04/14 04:27

Chromeでしたら「Network」タブから全ての通信の中身を見ることができます。 Nameから通信先を選択して、右側にあらわれる「Response」というタブでレスポンスの中身を確認できると思います。
keynyon

2017/04/14 05:38

realさま ご丁寧にご教示いただきありがとうございました。 「Name」内がブランクになっており、通信先がない状態になっております。 ちなみに、functions.phpから「var_dump($formData); exit;」を削除して、送信できる状態にしても、同様にNameはブランクです。Basic認証をかけているのですが、それと関係ありますでしょうか? 何度も申し訳ございません。ご教示いただけますと幸いです。 どうぞよろしくお願いいたします。
real

2017/04/14 05:52

通信後に開発ツールを開いていたりしないでしょうか? 初めからツールが開かれれている状態でないとレポートしてくれません。 また、通信先の絞り込みを行っていないでしょうか? 「All XHR CSS Img Media Font...」と並んでいると思いますが、AllでなかったらAllにしてみてください。
keynyon

2017/04/14 06:42

realさま ご教示ありがとうございます。「All」にしたら表示されました。お手間取らせて申し訳ございません。 送信ロード中に表示される「Response」に、以下が表示されました。 全文で申し訳ございませんが、コピペさせていただきます。(IPの箇所だけダミーです) =================== object(stdClass)#3275 (6) { ["title"]=> string(18) "お問い合わせ" ["posted_data"]=> array(21) { ["_wpcf7"]=> string(3) "170" ["_wpcf7c"]=> string(5) "step2" ["_wpcf7_version"]=> string(5) "4.1.1" ["_wpcf7_locale"]=> string(2) "ja" ["_wpcf7_unit_tag"]=> string(17) "wpcf7-f170-p54-o1" ["_wpnonce"]=> string(10) "9083f5a109" ["category"]=> array(1) { [0]=> string(23) "aaa@xxx.co.jp" } ["theme"]=> array(1) { [0]=> string(10) "テーマ1" } ["note"]=> string(9) "テスト" ["company"]=> string(9) "テスト" ["URL"]=> string(0) "" ["division"]=> string(0) "" ["yourName"]=> string(9) "テスト" ["kana"]=> string(9) "テスト" ["e-mail"]=> string(15) "sample@xx.co.jp" ["telNumber"]=> string(11) "00000000000" ["zip"]=> string(7) "1010023" ["addr11"]=> string(36) "東京都千代田区神田松永町" ["privacy"]=> array(1) { [0]=> string(39) "個人情報保護方針に同意する" } ["_wpcf7_is_ajax_call"]=> string(1) "1" ["radioBox"]=> array(1) { [0]=> string(0) "" } } ["uploaded_files"]=> array(0) { } ["submit_time"]=> string(15) "1492151468.1083" ["ip"]=> string(15) “000.000.000.000" ["user"]=> NULL } =================== こちらで分かりますでしょうか? 引き続きご教示いただけますと幸いです。 どうぞよろしくお願いいたします。
real

2017/04/14 12:05

ありがとうございます。 残念ながら、$formData->scanned_form_tagsが存在していないので、質問に書かれている処理が動いていない状況のようです(バージョンが違ったりするのかもしれません)。 回答に別の方法で一応うまくいきそうなコードを追記してみたので、試してみてください。
keynyon

2017/04/15 03:22

realさま ご教示いただいたコードで、希望通りの結果が得られました! 本当にご丁寧に最後までご教示くださいまして誠にありがとうございます。 大変助かりました。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問