我想在这里实现的是以下几点:
- 自动添加BonusProduct0到购物车,当小计达到65
- 与BonusProduct1自动替换BonusProduct0当小计达到80
- 与BonusProduct2自动替换BonusProduct1当小计达到100
- 删除所有奖金及产品,恰好是在车的时候小计低于65
- 有奖金的产品要么是零价位和不可访问或正常价格,并自动在基于上述条件添加到购物车重置其价格
我想在这里实现的是以下几点:
工作代码。
function add_product_if_not_there($product_id) {
$found = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->get_id() == $product_id ) {
$found = true;
break;
}
}
if (!$found)
WC()->cart->add_to_cart( $product_id );
}
function remove_product_if_there($product_id) {
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values['data'];
if ( $_product->get_id() == $product_id ) {
WC()->cart->remove_cart_item( $cart_item_key );
break;
}
}
}
abstract class FreeCookiesBundles
{
const NoCookiesBundle = 0;
const TwoCookiesBundle = 2;
const ThreeCookiesBundle = 3;
const FourCookiesBundle = 4;
const TwoCookiesBundleId = 4920;
const ThreeCookiesBundleId = 4921;
const FourCookiesBundleId = 4922;
}
function bonus_add_product_to_cart() {
global $woocommerce;
if ( is_admin() )
return ;
$free_product_ids = array(FreeCookiesBundles::TwoCookiesBundleId,
FreeCookiesBundles::ThreeCookiesBundleId,
FreeCookiesBundles::FourCookiesBundleId);
$cookies_bundle = FreeCookiesBundles::NoCookiesBundle;
$cart_total_lvls = array(65, 100, 128);
if ( ($woocommerce->cart->subtotal >= $cart_total_lvls[0]) &&
($woocommerce->cart->subtotal < $cart_total_lvls[1])) {
$cookies_bundle = FreeCookiesBundles::TwoCookiesBundle;
} else if ( ($woocommerce->cart->subtotal >= $cart_total_lvls[1]) &&
($woocommerce->cart->subtotal < $cart_total_lvls[2]) ) {
$cookies_bundle = FreeCookiesBundles::ThreeCookiesBundle;
} else if ( ($woocommerce->cart->subtotal >= $cart_total_lvls[2]) ) {
$cookies_bundle = FreeCookiesBundles::FourCookiesBundle;
}
echo $cookies_bundle;
switch ($cookies_bundle) {
case FreeCookiesBundles::TwoCookiesBundle:
add_product_if_not_there($free_product_ids[0]);
remove_product_if_there($free_product_ids[1]);
remove_product_if_there($free_product_ids[2]);
break;
case FreeCookiesBundles::ThreeCookiesBundle:
add_product_if_not_there($free_product_ids[1]);
remove_product_if_there($free_product_ids[0]);
remove_product_if_there($free_product_ids[2]);
break;
case FreeCookiesBundles::FourCookiesBundle:
add_product_if_not_there($free_product_ids[2]);
remove_product_if_there($free_product_ids[0]);
remove_product_if_there($free_product_ids[1]);
break;
default:
remove_product_if_there($free_product_ids[0]);
remove_product_if_there($free_product_ids[1]);
remove_product_if_there($free_product_ids[2]);
}
}
add_action( 'template_redirect', 'bonus_add_product_to_cart' );