即使在 WooCommerce 购物车中添加两次产品,也将所有项目设置在单独的行中

问题描述 投票:0回答:1

当数量超过 1 答案代码时,我尝试在 Woocommerce 中使用分离的购物车项目,但是添加产品后,如果我返回到同一产品页面并再次添加它,它不会添加到新行,而是增加我的数量不想要,我每次都希望新行作为新项目。

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 );
        }
    }
}
php wordpress woocommerce cart product-quantity
1个回答
1
投票

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

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

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

© www.soinside.com 2019 - 2024. All rights reserved.