【メモ】Welcartの受注データを投稿ユーザー毎に分離する
*注意 自分用のメモなので、実践することでの不具合、動作不良については責任とれません。
一つのWELCARTで複数の店舗の商品を扱う場合、店舗毎に受注データを分離したかった。
(A店舗のりんご、みかん、B店舗の豚肉を買った場合、りんご、みかんという受注データと、豚肉という受注データを分離したい)
店舗の情報をユーザーとして登録することにして、各ユーザーが入力した商品データ毎に受注データを分離するようにカスタマイズ
まずwelcartプラグインの中の classes/cart.class.phpを開き、key_unserialize関数の内容を変更
// key unserialize ************************************************************** function key_unserialize($serial){ global $wpdb; $array = unserialize($serial); $ids = array_keys($array); $skus = array_keys($array[$ids[0]]); $row['serial'] = $serial; $row['post_id'] = $ids[0]; $row['sku'] = $skus[0]; $row['options'] = $array[$ids[0]][$skus[0]]; $row['price'] = $_SESSION['usces_cart'][$serial]['price']; $row['quantity'] = $_SESSION['usces_cart'][$serial]['quant']; $row['advance'] = isset($_SESSION['usces_cart'][$serial]['advance']) ? $_SESSION['usces_cart'][$serial]['advance'] : array(); $row['author_id'] = $wpdb->get_var("SELECT post_author FROM {$wpdb->posts} WHERE ID = {$row['post_id']}"); $row['author_name'] = $wpdb->get_var("SELECT user_nicename FROM {$wpdb->users} WHERE ID = {$row['author_id']}"); return $row; }
これで、get_cartをしたときにその商品を投稿したユーザーの情報を取得できるようになった。
次に注文が確定したときに受注データをデータベースに保存する段階で受注データを分離。
welcartのfunction\function.phpの中のusces_reg_orderdata関数を
function usces_reg_orderdata( $results = array() ) { global $wpdb, $usces; // $wpdb->show_errors(); $carts = $usces->cart->get_cart(); $oeder_cart = array(); foreach($carts as $split_cart){ $oeder_cart[$split_cart['author_name']][] = $split_cart; } $entry = $usces->cart->get_entry(); foreach($oeder_cart as $cart){ if( empty($cart) ) return 0; (省略。変更はありません) $args = array('cart'=>$cart, 'entry'=>$entry, 'order_id'=>$order_id, 'member_id'=>$member['ID'], 'payments'=>$payments, 'charging_flag'=>$charging_flag); do_action('usces_action_reg_orderdata', $args); endif; } return $order_id; }
のように変更。
最初に受注データを読み込み、それをユーザー毎に分離して、ユーザーの数だけforeachで受注データ出力を繰り返しています。
とりあえず現状動作していますが、チェックが甘いのでまだ何か問題がありそう。
次はこの分離したデータ分のメールの出力をどうするか考えないと。