welcartカートから商品を削除した時のWCEX Couponプラグインの動作

次の流れで処理している。

$usces->cart->del_row()

do_action( ‘usces_action_after_cart_del_row’, $index )

wccp_action_after_cart_del_row_unset_usedcoupon()

add_action( 'usces_action_after_cart_del_row', 'wccp_action_after_cart_del_row_unset_usedcoupon' );


/**
 * クーポンのセッションクリア
 * usces_action_after_cart_del_row
 */
function wccp_action_after_cart_del_row_unset_usedcoupon() {
	unset( $_SESSION['usces_entry']['order']['usedcoupon'] );
}

$_SESSION[‘usces_entry’][‘order’][‘usedcoupon’](適用済みクーポン名のstring)を削除するだけである。
$_SESSION[‘usces_entry’][‘order’][‘discount’]の値はそのまま。再計算していない。
$_SESSION[‘usces_entry’][‘order’][‘coupon_discount_op’]と$_SESSION[‘usces_entry’][‘order’][‘coupon_discount’]の値もそのまま残る。

$_SESSION[‘usces_entry’][‘order’][‘usedcoupon’]がunset()されるので、この値をフラグにして実行しているクーポン値引きは行われない。
複数の商品がカート内にあって、その内の1つだけ削除した場合も、クーポン値引き実行のフラグ値がunset()されるので、対象になるすべての商品のクーポン値引きが行われなくなる。
ただし繰り返すが、$_SESSION[‘usces_entry’][‘order’][‘discount’]の値は残っている。

$_SESSION[‘usces_entry’][‘order’][‘discount’]値は、wc_confirm_page.phpに遷移するまで再計算されない。
wc_confirm_page.php内で、usces_get_confirm_rows() > $usces->set_cart_fees() > $usces->get_order_discount(),Welcart_Tax->get_order_discount() が実行されて再計算されるまでdiscount値が残ったままである。

WCEX Couponプラグインに加えて、会員割引など独自の値引き制度を実装する場合は、上述したWCEX Couponの動作を踏まえてプログラムする必要がある。


コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です