php - 覆盖购物车中现有产品的产品数量 -Woocommerce

标签 php wordpress woocommerce cart product-quantity

我已经尝试了很多方法来覆盖购物车中现有的产品数量,但没有任何效果。

实际上我有这段代码:

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

设置将产品添加到购物车时的最大可用产品数量。 但当客户更改商品数量时,我还需要在购物车页面中进行操作...

我认为我们可以通过两种方式处理这个问题:

  • 首先,我们在添加到购物车时删除已存在于购物车中的相同产品的产品
  • 第二种方法是在将同一产品添加到购物车时更新现有产品的数量,这也适用于可变产品。

我为此尝试了很多不同的代码片段,但没有结果。

任何帮助将不胜感激。

最佳答案

使用此自定义函数 Hook woocommerce_after_cart_item_quantity_update 操作 Hook ,将避免客户在更新购物车商品数量时添加超过产品库存数量:

add_action('woocommerce_after_cart_item_quantity_update', 'update_cart_items_quantities', 10, 4 );
function update_cart_items_quantities( $cart_item_key, $quantity, $old_quantity, $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_stock;
}

代码位于事件子主题(或事件主题)的 function.php 文件或任何插件文件中。

此代码经过测试,甚至适用于产品变体。

关于php - 覆盖购物车中现有产品的产品数量 -Woocommerce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650649/

相关文章:

php - 将 null 作为 array_keys 的第二个参数传递

php - 为什么此代码无法检测 javascript 是否被阻止?

PHPStorm - Laravel Eloquent 无代码提示

javascript - 如何在自定义元素或按钮小部件上触发事件?

wordpress - 如何使用 qTranslate X 使 Wordpress 自定义字段输入文本可翻译?

php - 我有一个查询可以很好地处理名称标签的第一个字母,但不能处理数字?

php - 自动将订单项自定义元数据添加到 WooCommerce 中的订单备注中

php - 输出文件时 "echo" block 有什么好处?

php - 在 WooCommerce 中的 WC_Product_Query 上按名称 "LIKE"过滤产品

php - Woocommerce 变量订阅自定义字段复选框设置默认为未选中