確認メール後日送信プラグインのカスタマイズ相談

SOY Shopに関する話題はこちら。

確認メール後日送信プラグインのカスタマイズ相談

投稿記事by tk8 on 2019年6月11日(火) 19:00

確認メール後日送信プラグインのカスタマイズについてのご相談です。

soyshopで運営している私のダウンロードサイトでは、

・無料の素材やコンテンツで釣ってまず無料会員登録をさせて
・しばらくは無料のコンテンツを楽しんでもらい
・その間にクーポンや割引のPRをしたりして購買意欲を高めて最終的にお金を出してもらう

という導線を組んでいます。

もちろん皆が導線通りに購入してくれるわけではないため引き続き調整が必要なのですが、
・会員登録(本登録)をしているけれどまだ買っていない人

だけに「確認メール後日送信プラグイン」を使って販売促進のメールを送信出来ないかと考えていました。


確認メール後日送信プラグインのソースの中にsql文で、

$sql = "SELECT DISTINCT(o.id), o.user_id, user.mail_address, user.name, user.reading, user.birthday, o.order_date ".
"FROM soyshop_order o ".
"INNER JOIN soyshop_user user ".
"ON o.user_id = user.id ".
"WHERE o.order_date > " . $start . " ".
"AND o.order_date < " . $end . " ".
"AND o.order_status < " . SOYShop_Order::ORDER_STATUS_CANCELED;

などと、新規注文 支払確認 発送のいずれかの設定に応じた選択がなされていますが、ひとまずこの部分だけを書き換えて、「会員登録をして〇日経過したユーザーの中から、まだ買っていない人」だけを選択できないかと思っています。

様々なサイトを見て調べながら色々と書き換えてみているのですが、あいにく初心者故に正解にたどり着くことが未だ出来ていません。

「会員登録をして〇日経過したユーザーの中から、まだ買っていない人」だけを選択するためにどのように書き換えたらよいか、どなたかわかる方お教えいただけないでしょうか?

引き続き自力でも色々と試してみますが、お力をお貸し頂ければ幸いです。
tk8
 
記事: 59
登録日時: 2013年10月21日(月) 19:57

Re: 確認メール後日送信プラグインのカスタマイズ相談

投稿記事by inunosinsi on 2019年6月12日(水) 04:51

コードを確認してみましたが、SQLをただ修正するだけでは難しそうです。
SQL以外でも修正が必要だと判断した点ですが、メールを送信する時の名簿の持ち方が、
$users[$orderId] = $this->userDao->getObject($result); //SOYShop_Userオブジェクト(顧客)情報を持つで、$users配列のインデックスが注文IDになっていたことです。

今回の要件では、注文を一度も行っていないということになりますので、
おそらく、
コード: 全て選択
$sql = "id, mail_address, name, reading, birthday ".
"FROM soyshop_user ".
"WHERE id NOT IN (SELECT user_id FROM soyshop_order);";

※上記のSQL構文は試していません。最適化も必要です。

WHERE句にサブクエリで注文していないすべてのユーザという条件を加えると、
結果として返ってくるものに注文IDが入らないことになります。

となると、
SQL実行後の$users[$orderId] = $this->userDao->getObject($result);が成り立たなくなり、
その後の処理も成り立たない可能性があります。

「会員登録をして〇日経過したユーザーの中から、まだ買っていない人」だけを選択できないかと思っています。

ですが、上記の問題を解決していたらあとひと押しで、

コード: 全て選択
$sql = "id, mail_address, name, reading, birthday ".
"FROM soyshop_user ".
"WHERE id NOT IN (SELECT user_id FROM soyshop_order) ".
"AND register_date < " . strtotime("-5 day");

こんな感じでstrtotime関数で数日前よりも更に前の登録日の顧客のみに絞ることが可能です。
大阪でフリーのプログラマをしています。
以前はSOY CMSの開発元で働いていました。

SOY ShopのプラグインやSOY Appの開発のサポートをしています。
http://saitodev.co/soycms(SOY CMSのマニュアルを作成しています)

最近はSOY Shopを業務アプリとして使用できないか?と模索しています。
SOY Shopで管理画面のみ使用モードを追加しました - saitodev.co

株式会社京都農販(SOY Shopのサイト)
株式会社コトブキ園(SOY Shop)
inunosinsi
 
記事: 760
登録日時: 2008年6月12日(木) 20:48

Re: 確認メール後日送信プラグインのカスタマイズ相談

投稿記事by tk8 on 2019年6月12日(水) 13:41

回答をありがとうございました。

SQL実行後の$users[$orderId] = $this->userDao->getObject($result);が成り立たなくなり、
その後の処理も成り立たない可能性があります。


とのご指摘の通りで、お教えいただいたsql文に変更してみても正しく処理は完了しないようで、メール送信は実行されませんでした。
※管理者にのみメールが飛ぶようにsendMailの送信先だけを書き換えてテストしています。

soyshopがきっかけでプログラミングに興味を持ち、本業の合間を縫いつつ少しずつ勉強しています。

もう少し自分でも色々調べつつテストをしてみます。
tk8
 
記事: 59
登録日時: 2013年10月21日(月) 19:57

Re: 確認メール後日送信プラグインのカスタマイズ相談

投稿記事by tk8 on 2019年6月13日(木) 17:10

メール送信がされなかった件ですが、SELECTを加えたところ正常に動作しました。

ご協力をありがとうございました。
tk8
 
記事: 59
登録日時: 2013年10月21日(月) 19:57


Return to SOY Shop

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[2人]

cron