Facebook にシェア
[`evernote` not found]
LINEで送る

*注意 自分用のメモなので、実践することでの不具合、動作不良については責任とれません。
一つの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で受注データ出力を繰り返しています。
とりあえず現状動作していますが、チェックが甘いのでまだ何か問題がありそう。
次はこの分離したデータ分のメールの出力をどうするか考えないと。