【メモ】Welcartの受注データを投稿ユーザー毎に分離する
*注意 自分用のメモなので、実践することでの不具合、動作不良については責任とれません。
一つのWELCARTで複数の店舗の商品を扱う場合、店舗毎に受注データを分離したかった。
(A店舗のりんご、みかん、B店舗の豚肉を買った場合、りんご、みかんという受注データと、豚肉という受注データを分離したい)
店舗の情報をユーザーとして登録することにして、各ユーザーが入力した商品データ毎に受注データを分離するようにカスタマイズ
まずwelcartプラグインの中の classes/cart.class.phpを開き、key_unserialize関数の内容を変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // 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関数を
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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で受注データ出力を繰り返しています。
とりあえず現状動作していますが、チェックが甘いのでまだ何か問題がありそう。
次はこの分離したデータ分のメールの出力をどうするか考えないと。