Удаление автоматически добавленного продукта из WooCommerce - PullRequest
0 голосов
/ 29 апреля 2020

Так что я могу использовать этот фрагмент из документации по woocommerce, и он работает, чтобы добавить бесплатный продукт, когда будет достигнута сумма в корзине. Тем не менее, наши клиенты должны иметь возможность удалить продукт из корзины, если они не хотят его (постоянные клиенты, которые не хотят каждый раз один и тот же подарок). С помощью этого фрагмента кнопка удаления из корзины не работает для бесплатного продукта.

/**
 * Add another product depending on the cart total
 */
add_action( 'template_redirect', 'add_product_to_cart' );
function add_product_to_cart() {
  if ( ! is_admin() ) {
        global $woocommerce;
        $product_id = 2831; //replace with your product id
        $found = false;
        $cart_total = 30; //replace with your cart total needed to add above item

        if( $woocommerce->cart->total >= $cart_total ) {
            //check if product already in cart
            if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
                foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                    $_product = $values['data'];
                    if ( $_product->get_id() == $product_id )
                        $found = true;
                }
                // if product not found, add it
                if ( ! $found )
                    $woocommerce->cart->add_to_cart( $product_id );
            } else {
                // if no products in cart, add it
                $woocommerce->cart->add_to_cart( $product_id );
            }
        }
    }
}
``
code above is from here: https://docs.woocommerce.com/document/automatically-add-product-to-cart-on-visit/

1 Ответ

0 голосов
/ 29 апреля 2020

Удаление продукта из корзины действительно будет работать, но проблема в том, что код также автоматически повторно добавит продукт снова.

Один из способов решения этой проблемы - помнить, что продукт уже был добавлен один раз, и чтобы не добавлять продукт повторно, если продукт будет добавлен в другой раз (например, после его удаления из корзины).

Простой способ сделать это - сохранить данные внутри сеанса WooCommerce, используя WC()->session. Модифицированный код ниже:

add_action( 'template_redirect', 'add_product_to_cart' );
function add_product_to_cart() {
  if ( ! is_admin() ) {
        global $woocommerce;
        $product_id = 2831; //replace with your product id
        $found = false;
        $cart_total = 10; //replace with your cart total needed to add above item

        if( $woocommerce->cart->total >= $cart_total && ! WC()->session->get( 'free_item_given', false ) ) { // <--- ADDED CHECK FOR free_item_given HERE
            //check if product already in cart
            if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
                foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
                    $_product = $values['data'];
                    if ( $_product->get_id() == $product_id )
                        $found = true;
                }
                // if product not found, add it
                if ( ! $found ) {
                    $woocommerce->cart->add_to_cart( $product_id );
                    WC()->session->set( 'free_item_given', true ); // <--- REMEMBER free_item_given HERE
                }
            } else {
                // if no products in cart, add it
                $woocommerce->cart->add_to_cart( $product_id );
                WC()->session->set( 'free_item_given', true ); // <--- REMEMBER free_item_given HERE
            }
        }
    }
}

Я надеюсь, что это решит вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...