基于范围的条件下自动将产品添加到WooCommerce车(Automatically add pro

2019-10-29 06:19发布

我想在这里实现的是以下几点:

  • 自动添加BonusProduct0到购物车,当小计达到65
  • 与BonusProduct1自动替换BonusProduct0当小计达到80
  • 与BonusProduct2自动替换BonusProduct1当小计达到100
  • 删除所有奖金及产品,恰好是在车的时候小计低于65
  • 有奖金的产品要么是零价位和不可访问或正常价格,并自动在基于上述条件添加到购物车重置其价格

Answer 1:

工作代码。

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' );


文章来源: Automatically add products to WooCommerce cart based on range conditions