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

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

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

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

Q&A

解決済

1回答

3354閲覧

wpcf7_special_mail_tags がフックしてくれない。

Shinroh

総合スコア61

WordPress

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

0グッド

0クリップ

投稿2017/10/20 06:17

WordPressのContact Form 7のwpcf7_special_mail_tagsを利用して
total、product01_count、product02_count、product03_countの4つを追加しています。

php

1function my_special_mail_tags($output, $name, $html){ 2 3 if ('total' == $name) { 4 $submission = WPCF7_Submission::get_instance(); 5 $data = $submission -> get_posted_data(); 6 $count1_1 = $data['your-product01-count1']; 7 $count1_2 = $data['your-product01-count2']; 8 $count1_3 = $data['your-product01-count3']; 9 $count1 = $count1_1 + $count1_2 + $count1_3; 10 $count2_1 = $data['your-product02-count1']; 11 $count2_2 = $data['your-product02-count2']; 12 $count2_3 = $data['your-product02-count3']; 13 $count2 = $count2_1 + $count2_2 + $count2_3; 14 $count3_1 = $data['your-product03-count1']; 15 $count3_2 = $data['your-product03-count2']; 16 $count3_3 = $data['your-product03-count3']; 17 $count3 = $count3_1 + $count3_2 + $count3_3; 18 $ret = number_format($count1*25000 + $count2*18300 + $count3*15500); 19 return $ret; 20 } 21 22 if ('product01_count' == $name) { 23 $submission = WPCF7_Submission::get_instance(); 24 $data = $submission -> get_posted_data(); 25 $count1 = $data['your-product01-count1']; 26 $count2 = $data['your-product01-count2']; 27 $count3 = $data['your-product01-count3']; 28 $ret = $count1 + $count2 + $count3; 29 return $ret; 30 } 31 32 if ('product02_count' == $name) { 33 $submission = WPCF7_Submission::get_instance(); 34 $data = $submission -> get_posted_data(); 35 $count1 = $data['your-product02-count1']; 36 $count2 = $data['your-product02-count2']; 37 $count3 = $data['your-product02-count3']; 38 $ret = $count1 + $count2 + $count3; 39 return $ret; 40 } 41 42 if ('product03_count' == $name) { 43 $submission = WPCF7_Submission::get_instance(); 44 $data = $submission -> get_posted_data(); 45 $count1 = $data['your-product03-count1']; 46 $count2 = $data['your-product03-count2']; 47 $count3 = $data['your-product03-count3']; 48 $ret = $count1 + $count2 + $count3; 49 return $ret; 50 } 51 52} 53 54add_filter('wpcf7_special_mail_tags', 'my_special_mail_tags', 10, 3); 55

これによって、商品の注文個数と金額を計算しています。
個数が1個以上ある場合には、きちんとフックしてくれるのですが、個数が0個の場合にはなぜかフックせずにタグがそのまま表示されてしまいます。

0個の場合にもきちんとフックさせるにはどのような方法が必要でしょうか?

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

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

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

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

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

Shinroh

2017/10/20 10:43

マルチポストは非推奨なのですね。失礼しました。急いでいたもので、WPのコミュニティとこちらと両方に投稿させていただきました。
guest

回答1

0

自己解決

ひとまず正しい方法かどうかはわからないのですが、以下の方法で解決しました。
wpcf7_before_send_mail を使って、送信前の書き換えられていないタグを0で置換することによって処理しました。
ありがとうございました。

php

1function my_wpcf7_before_send_mail($cf7) 2{ 3 $mail = $cf7->prop('mail'); 4 $mail['body'] = str_replace("[total]", "0", $mail['body']); 5 $mail['body'] = str_replace("[product01_count]", "0", $mail['body']); 6 $mail['body'] = str_replace("[product02_count]", "0", $mail['body']); 7 $mail['body'] = str_replace("[product03_count]", "0", $mail['body']); 8 9 $mail2 = $cf7->prop('mail_2'); 10 $mail2['body'] = str_replace("[total]", "0", $mail2['body']); 11 $mail2['body'] = str_replace("[product01_count]", "0", $mail2['body']); 12 $mail2['body'] = str_replace("[product02_count]", "0", $mail2['body']); 13 $mail2['body'] = str_replace("[product03_count]", "0", $mail2['body']); 14 15 $cf7->set_properties(array("mail" => $mail,"mail_2" => $mail2)); 16 return $cf7; 17} 18 19add_action('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1)

投稿2017/10/21 03:48

Shinroh

総合スコア61

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

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

Shinroh

2017/10/22 16:24 編集

私の方は私の方でミスがあって、結局うまく対応できていなかったので、修正しました。 最終的な形は以下です。 function my_wpcf7_before_send_mail($cf7) { $submission = WPCF7_Submission::get_instance(); $data = $submission->get_posted_data(); $count1_1 = isset($data['your-product01-count1']) ? $data['your-product01-count1'] : 0; $count1_2 = isset($data['your-product01-count2']) ? $data['your-product01-count2'] : 0; $count1_3 = isset($data['your-product01-count3']) ? $data['your-product01-count3'] : 0; $count1 = $count1_1 + $count1_2 + $count1_3; $count2_1 = isset($data['your-product02-count1']) ? $data['your-product02-count1'] : 0; $count2_2 = isset($data['your-product02-count2']) ? $data['your-product02-count2'] : 0; $count2_3 = isset($data['your-product02-count3']) ? $data['your-product02-count3'] : 0; $count2 = $count2_1 + $count2_2 + $count2_3; $count3_1 = isset($data['your-product03-count1']) ? $data['your-product03-count1'] : 0; $count3_2 = isset($data['your-product03-count2']) ? $data['your-product03-count2'] : 0; $count3_3 = isset($data['your-product03-count3']) ? $data['your-product03-count3'] : 0; $count3 = $count3_1 + $count3_2 + $count3_3; $replace0 = number_format($count1 * 25000 + $count2 * 18300 + $count3 * 15500); $count1 = isset($data['your-product01-count1']) ? $data['your-product01-count1'] : 0; $count2 = isset($data['your-product01-count2']) ? $data['your-product01-count2'] : 0; $count3 = isset($data['your-product01-count3']) ? $data['your-product01-count3'] : 0; $replace1 = $count1 + $count2 + $count3; $count1 = isset($data['your-product01-count1']) ? $data['your-product02-count1'] : 0; $count2 = isset($data['your-product01-count2']) ? $data['your-product02-count2'] : 0; $count3 = isset($data['your-product01-count3']) ? $data['your-product02-count3'] : 0; $replace2 = $count1 + $count2 + $count3; $count1 = isset($data['your-product01-count1']) ? $data['your-product03-count1'] : 0; $count2 = isset($data['your-product01-count2']) ? $data['your-product03-count2'] : 0; $count3 = isset($data['your-product01-count3']) ? $data['your-product03-count3'] : 0; $replace3 = $count1 + $count2 + $count3; $mail = $cf7->prop('mail'); $mail['body'] = str_replace("[total]", $replace0, $mail['body']); $mail['body'] = str_replace("[product01_count]", $replace1, $mail['body']); $mail['body'] = str_replace("[product02_count]", $replace2, $mail['body']); $mail['body'] = str_replace("[product03_count]", $replace3, $mail['body']); $mail2 = $cf7->prop('mail_2'); $mail2['body'] = str_replace("[total]", $replace0, $mail2['body']); $mail2['body'] = str_replace("[product01_count]", $replace1, $mail2['body']); $mail2['body'] = str_replace("[product02_count]", $replace2, $mail2['body']); $mail2['body'] = str_replace("[product03_count]", $replace3, $mail2['body']); $cf7->set_properties(array("mail" => $mail, "mail_2" => $mail2)); return $cf7; } add_action('wpcf7_before_send_mail', 'my_wpcf7_before_send_mail', 1, 1); 結局タグ追加は行わず、フォームに入力されたデータをWPCF7_Submissionで取得して、my_wpcf7_before_send_mailでメール本文から追加タグ部分を置換するという形式で処理しました。 こちらはうまく動きましたので共有させていただきます。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問