Переопределить количество товара уже существующего товара в корзине

Я много пытался переопределить существующее количество товара в корзине, но ничего.

На самом деле у меня есть этот код:

add_action('woocommerce_add_to_cart', 'add_to_cart_qty', 10, 6 );
function add_to_cart_qty( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){

    $real_product_id = $variation_id > 0 ? $variation_id : $product_id;

    $product = wc_get_product($real_product_id);
    $product_stock = $product->get_stock_quantity();

    // Zero or negative stock (remove the product)
    if( $product_stock <= 0 && $product->get_manage_stock() ){
        WC()->cart->remove_cart_item( $cart_item_key );
        return;
    }

    if( $quantity > $product_stock && $product->get_manage_stock() ){
        WC()->cart->set_quantity( $cart_item_key, $product_stock );
    }
}

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

Я думаю, что мы можем решить эту проблему двумя способами:

  • сначала либо удаляем товар, добавляем в корзину тот же товар, который уже есть в корзине
  • Второй способ - обновить количество существующего товара при добавлении в корзину того же товара, и это также должно работать для переменных товаров.

Я пробовал много разных кодов для этого, но безрезультатно.

Любая помощь будет оценена.

1 ответ

Решение

Использование этой пользовательской функции подключено woocommerce_after_cart_item_quantity_update Хук действия, позволит клиенту не добавлять больше количества товара при обновлении количества товара в корзине:

add_action('woocommerce_after_cart_item_quantity_update', 'update_cart_items_quantities', 10, 3 );
function update_cart_items_quantities( $cart_item_key, $quantity, $old_quantity ){
    $cart = WC()->cart;
    $cart_data = $cart->get_cart();
    $cart_item = $cart_data[$cart_item_key];
    $manage_stock = $cart_item['data']->get_manage_stock();
    $product_stock = $cart_item['data']->get_stock_quantity();

    // Zero or negative stock (remove the product)
    if( $product_stock <= 0 && $manage_stock ){
        unset( $cart->cart_contents[ $cart_item_key ] );
    }
    if( $quantity > $product_stock && $manage_stock ){
        $cart->cart_contents[ $cart_item_key ]['quantity'] = $product_stock;
    }
    return $product_quantity;
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы) или в любом файле плагина.

Этот код протестирован и работает даже для вариантов продукта.

Другие вопросы по тегам