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

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