我try 使用Separated cart items in Woocommerce when quantity is more than 1答案代码,但添加产品后,如果我返回到相同的产品页面并再次添加它,它不是添加到新行,而是增加了我不想要的数量,每次我都希望新行作为新项目.

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

    // If product has more than 1 quantity
    if ( $quantity > 1 ) {

        // Keep the product but set its quantity to 1
        WC()->cart->set_quantity( $cart_item_key, 1 );

        // Run a loop 1 less than the total quantity
        for ( $i = 1; $i <= $quantity -1; $i++ ) {
            /**
             * Set a unique key.
             * This is what actually forces the product into its own cart line item
             */
            $cart_item_data['unique_key'] = md5( microtime() . rand() . "Hi Mom!" );

            // Add the product as a new line item with the same variations that were passed
            WC()->cart->add_to_cart( $product_id, 1, $variation_id, $variation, $cart_item_data );
        }
    }
}

推荐答案

要解决此问题,请使用以下代码替换:

add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data' );
function filter_add_cart_item_data( $cart_item_data ) {
    if ( ! isset($cart_item_data['unique_key']) ) {
        $cart_item_data['unique_key'] = md5(microtime().rand());
    }
    return $cart_item_data;
}


add_action( 'woocommerce_add_to_cart', 'split_cart_items_by_quantity', 10, 6 );
function split_cart_items_by_quantity( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ) {
    if ( $quantity == 1 ) return;
        
    // Keep the product but set its quantity to 1
    WC()->cart->set_quantity($cart_item_key, 1);

    // Loop through each unit of item quantity
    for ( $i = 1; $i <= $quantity -1; $i++ ) {
        // Make each quantity item unique and separated
        $cart_item_data['unique_key'] = md5(microtime().rand());

        // Add each item quantity as a separated cart item
        WC()->cart->add_to_cart( $product_id, 1, $variation_id, $variation, $cart_item_data );
    }
}

代码位于您的子主题的unctions.php文件中(或在插件中).经过测试,效果良好.

Php相关问答推荐

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

如何从该字符串中删除这些图标转换的ASCII问号字符?

使用php ZipArhive类将Zip压缩文件分成多个部分

无额外字段的Laravel同步

文件::Files()响应返回空对象数组

WooCommerce中特定付款方式的变更订单预留库存时间

启用 WooCommerce 我的帐户付款方式,允许客户添加付款方式

使用 phpseclib 验证 RSA-PSS

从插件更改主题功能,function_exists 不起作用

在特征中使用类的属性

带有分类术语数组的 WordPress Elementor 自定义查询 - 如何要求所有术语都在返回的帖子中

从 Laravel 机制中排除目录并直接访问该目录

如何从此字符串创建 Carbon 对象:2022-06-21T05:52:46.648533678Z?

如何故意创建不同的错误(404,500,419)? Lavravel PHP

PHP for each 函数打印 td

PHP 中的正则表达式,具有字符范围,但不包括特定字符

遇到特定键时修改二维数组以创建嵌套数据集

我需要获取传递到这个数组中的数据,但我没有得到它,因为在 Laravel 中数组是这样出现的

使用 splat 运算符时按引用传递 (...)

将加密/解密函数从 PHP 转换为 NodeJS