Reputation: 447
I am using "WooCommerce - Treat cart items separate if quantity is more than 1" answer code and it works great if you are using cart.
But in my case I redirect people directly to the checkout, so it does not work the same way for the cart resume at the bottom at the checkout. Also when product is added to cart multiple times, it doesn't give separated items.
Upvotes: 2
Views: 2800
Reputation: 253784
The following code will also handle ajax add to cart and same items added multiple times (+ jumping cart redirection to checkout):
// Split items by their quantity units
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() . "Hi Mom!" );
// Add each item quantity as a separated cart item
WC()->cart->add_to_cart( $product_id, 1, $variation_id, $variation, $cart_item_data );
}
}
// Make added cart item as a unique and separated (works with ajax add to cart too)
add_filter( 'woocommerce_add_cart_item_data', 'filter_add_cart_item_data', 10, 4 );
function filter_add_cart_item_data( $cart_item_data, $product_id, $variation_id, $quantity ) {
if ( ! isset($cart_item_data['unique_key']) ) {
// Make this item unique
$cart_item_data['unique_key'] = md5( microtime().rand() . "Hi Dad!" );
}
return $cart_item_data;
}
// Redirect to checkout jumping cart
add_action( 'template_redirect', 'cart_redirect_to_checkout' );
function cart_redirect_to_checkout(){
if( is_cart() ){
wp_safe_redirect( wc_get_checkout_url() );
exit();
}
}
Code goes in function.php file of your active child theme (or active theme). Tested and work.
This code add support for:
- Ajax added to cart items
- Same products added to cart multiple times
Based on: WooCommerce - Treat cart items separate if quantity is more than 1
Upvotes: 3