it-roy-ru.com

Удалить элемент с $ product_id - Woocommerce

Создана функция, когда покупатель получает товар, добавленный в корзину, когда достигает определенного количества. 

Пример, когда клиент достигает уровня 3 и получает продукт добавлен.

// Bonus products
$product_1 = '4751'; 
$product_2 = '4752'; 
$product_3 = '4753'; 

// Get cart value in a clean format
$cart_total = WC()->cart->get_cart_subtotal();
$cart_total = html_entity_decode($cart_total, ENT_QUOTES, 'UTF-8');
$cart_total_format = strip_tags($cart_total);
$cart_value = preg_filter("/[^0-9]/", "", $cart_total_format);
$sum_raw = $cart_value;

// Set the sum level 
$level3 = '1500';

// Check sum and apply product
if ($sum_raw >= $level3) {

// Cycle through each product in the cart and check for match
$found = 'false';
foreach (WC()->cart->cart_contents as $item) {
    global $product;
    $product_id = $item['variation_id'];

    if ($product_id == $product_3) {
        $found = 'true';
    }
}

// If product found we do nothing 
if ($found == 'true') {}
// else we will add it
else {
    //We add the product
    WC()->cart->add_to_cart($product_3);

Если клиент решит удалить элемент, поэтому это утверждение верно, я хочу иметь возможность удалить его снова.

if ($sum_raw < $level3) {

    // Trying to remove item
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {
        if ($cart_item['variation_id'] == $product_3) {

            //remove single product
            WC()->cart->remove_cart_item($product_3);
        }
    }
}

Я не могу удалить продукт из корзины. Есть идеи, что я делаю не так? Искал вокруг, не находя никакого решения, которое работает для меня. 

Решение

С помощью @Rohil_PHPBeginner & @WisdmLabs я пришел к этому решению, которое сделало всю работу за меня. 

global $woocommerce;
// Check if sum
if ($sum_raw < $level3) {
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {

        if ($cart_item['variation_id'] == $product_3) {
            //remove single product
            $woocommerce->cart->remove_cart_item($cart_item_key);
        }
    }
}
15
Mathias Asberg

Я думаю, что вы используете remove_cart_item неправильно. Если вы просмотрите документацию , вы обнаружите, что она принимает cart_item_key в качестве параметра (как указано в комментарии wisdmLabs).

Вы используете это так: 

WC()->cart->remove_cart_item($product_3);

Попробуйте это вместо этого: 

WC()->cart->remove_cart_item($cart_item_key);

После обновления этой строки, я думаю, вы сможете удалить продукт.

17
Rohil_PHPBeginner

вы можете использовать это:

$cartId = WC()->cart->generate_cart_id( 'PRODUCT ID' );
$cartItemKey = WC()->cart->find_product_in_cart( $cartId );
WC()->cart->remove_cart_item( $cartItemKey );

замените идентификатор продукта на ваш.

0
Mehdico