Depending on what kind of products you sell, you may want to prevent customers from purchasing a WooCommerce product more than once from your store. For some shops, you may want to disable any repeat purchases at all, or you may want to prevent repeat purchase only for a specific product.

We’ve seen this most commonly with WooCommerce Memberships, as shops may want to restrict a free trial membership from being “purchased” again, or restrict a product with a membership discount to one purchase. Some shops also want to prevent any repeat purchase for products, as they all use member discounts.

The wc_customer_bought_product check can help us determine if a customer has purchased a product in the past, which we can then use to disable purchasing for that product if the wc_customer_bought_product check returns true.

Disabling purchasing can be done with the help of the woocommerce_variation_is_purchasable and the woocommerce_is_purchasable filters, as these will disable the ability to purchase the product.

We can approach this in two ways: first, to disable repeat purchasing for a particular product (like our trial membership scenario), or to disable any repeat purchases (which would apply to all products in the store).

This is an intermediate development tutorial, so you should be familiar with WordPress / WooCommerce hooks and PHP to modify this.

Prevent Repeat Purchase with WooCommerce: Specific Product

The first thing we’ll need to do (and the one essential thing) is to prevent repeat purchases — this is where we’ll check that the customer has already bought the product, and ensure it can’t be purchased if so. We’ll only need the ID of the product that should not be purchased again.

The woocommerce_variation_is_purchasable and woocommerce_is_purchasable filters both pass in the product to the filter for additional data, so we can check the product passed in against the ID for the product we want to disable repeat purchasing for, then proceed if they match.

Once we’ve checked to see if the product passed in matches the one we want to disable repeat purchases for, we’ll then check to see if the customer has purchased this product before with wc_customer_bought_product(). If they have, we’ll disable purchasing.

The following example takes these steps, and it supports simple product IDs or variation IDs. The last function does a double-check for variable products — if you enter an ID of a variable product, it also disables purchasing for any variations for that product.

function sv_disable_repeat_purchase( $purchasable, $product ) {
    // Enter the ID of the product that shouldn't be purchased again
    $non_purchasable = 356;
    
    // Get the ID for the current product (passed in)
    $product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;
    
    // Bail unless the ID is equal to our desired non-purchasable product
    if ( $non_purchasable != $product_id ) {
        return $purchasable;
    }
    
    // return false if the customer has bought the product
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
        $purchasable = false;
    }
    
    // Double-check for variations: if parent is not purchasable, then variation is not
    if ( $purchasable && $product->is_type( 'variation' ) ) {
        $purchasable = $product->parent->is_purchasable();
    }
    
    return $purchasable;
}
add_filter( 'woocommerce_variation_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );

That’s the bulk of disabling repeat WooCommerce purchases for a particular product. However that’s not engineered to SkyVerge® levels quite yet 😉

We should also tell customers why they can’t purchase — we’ll need a notice to do so. If you only used simple products, you could simplify this code drastically, but we’ll show you an example that supports both simple and variable products (the third function would be entirely unnecessary for simple products).

First, we’ll put in our product ID that should disable repeat purchase. As we’ll be adding this notice with the woocommerce_single_product_summary action, we’re in the loop and can access the global $product object to compare against. This will let us see if we’re on the product page of the non-purchasable product (or on its parent page if it’s a variation).

Once we’ve checked to see if we’re on the non-purchasable product’s page, we’ll then check to see if the customer has bought this product. If the customer has purchased the product, our previous function will have disabled purchase, so this function will just render our message to say purchase is disabled.

There’s a check for variations here (along with a call to our next function) that can be removed if you only use simple products:

function sv_purchase_disabled_message() {
    // Enter the ID of the product that shouldn't be purchased again
    $no_repeats_id = 356;
    $no_repeats_product = wc_get_product( $no_repeats_id );
    
    // Get the current product to check if purchasing should be disabled
    global $product;
    
    if ( $no_repeats_product->is_type( 'variation' ) ) {
        // Bail if we're not looking at the product page for the non-purchasable product
        if ( ! $no_repeats_product->parent->id === $product->id ) {
            return;
        }
        
        // Render the purchase restricted message if we are
        if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
            sv_render_variation_non_purchasable_message( $product, $no_repeats_id );
        }
        
    } elseif ( $no_repeats_id === $product->id ) {
        if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id ) ) {
            // Create your message for the customer here
            echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">You\'ve already purchased this product! It can only be purchased once.</div></div>';
        }
    }
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );

For a simple product, the purchase restricted message will let the customer know why purchasing is disabled, and will always be shown on the product page for this product:

WooCommerce repeat purchase disabled

Now what about that function that renders the notice for variations? If you use a variable product, and only one variation has purchasing disabled, you probably don’t want that notice to be persistent. Instead, you only want to show it when that variation is selected.

We can do so by conditionally showing it with javascript depending on which variation of the product is selected by the customer:

function sv_render_variation_non_purchasable_message( $product, $no_repeats_id ) {
    
    // Double-check we're looking at a variable product
    if ( $product->is_type( 'variable' ) && $product->has_child() ) {
        $variation_purchasable = true;
        
        foreach ( $product->get_available_variations() as $variation ) {
            // only show this message for non-purchasable variations matching our ID
            if ( $no_repeats_id === $variation['variation_id'] ) {
                $variation_purchasable = false; 
                // edit your customer message here
                echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message js-variation-' . sanitize_html_class( $variation['variation_id'] ) . '">You\'ve already purchased this product! It can only be purchased once.</div></div>';
            }
        }
    }
    
    // show / hide this message for the right variation with some jQuery magic
    if ( ! $variation_purchasable ) {
        wc_enqueue_js("
            jQuery('.variations_form')
                .on( 'woocommerce_variation_select_change', function( event ) {
                    jQuery('.wc-nonpurchasable-message').hide();
                })
                .on( 'found_variation', function( event, variation ) {
                    jQuery('.wc-nonpurchasable-message').hide();
                    if ( ! variation.is_purchasable ) {
                        jQuery( '.wc-nonpurchasable-message.js-variation-' + variation.variation_id ).show();
                    }
                })
            .find( '.variations select' ).change();
        ");
    }
}

This will only show our repeat purchase restricted message if the selected variation has been purchased already, and will not show if another variation is selected:

WooCommerce purchasable variation

Variation is purchasable

WooCommerce non-purchasable varitation

Variation has been purchased already

You can view this QuickCast to see it in action.

That’s it! Now we have a bit of code that (1) stops customers from purchasing a particular WooCommerce product more than once, and (2) tells them why they can’t purchase the product again. The full code can be viewed here if you’d like a completed (and easier to read) sample.

Prevent Repeat Purchase with WooCommerce: Any Product

While this scenario is less likely, you can disable any repeat purchase for products in your shop. Instead of feeding a product ID into the check, we’ll use the ID of the current product instead. This will let us ensure that no product in the shop can be purchased more than once.

The restriction messages and behavior will look exactly as they do in the previous example.

Our first function will change slightly; instead of checking that the product ID matches our “no repeat purchases” id, we’ll check all product IDs. We can also get rid of the use of the woocommerce_variation_is_purchasable filter, as the woocommerce_is_purchasable filter will check the WC_Product_Variation objects as well as other product objects.

As a result, we’ll bail for parent products, as they can’t truly be purchased, and we only want to disable purchasing for the specific variation that’s been bought before.

// Disable repeat purchase of products / variations
function sv_disable_repeat_purchase( $purchasable, $product ) {

    // Don't run on parents of variations,
    // this will already check variations separately
    if ( $product->is_type( 'variable' ) ) {
        return $purchasable;
    }
    
    // Get the ID for the current product (passed in)
    $product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id; 
   
    // return false if the customer has bought the product / variation
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
        $purchasable = false;
    }
    
    // Double-check for variations: if parent is not purchasable, then variation is not
    if ( $purchasable && $product->is_type( 'variation' ) ) {
            $purchasable = $product->parent->is_purchasable();
    }
    
    return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'sv_disable_repeat_purchase', 10, 2 );

Our “purchase disabled” message function will change just a tad bit as well, as we’ll be checking the global $product object, which will always be the parent for variable products. We’ll need to get the children of this product and loop through them to see if we should be showing a restriction message:

function sv_purchase_disabled_message() {
    
    // Get the current product to see if it has been purchased
    global $product;
    
    if ( $product->is_type( 'variable' ) ) {
        
        foreach ( $product->get_children() as $variation_id ) {
            // Render the purchase restricted message if it has been purchased
            if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $variation_id ) ) {
                sv_render_variation_non_purchasable_message( $product, $variation_id );
            }
        }
        
    } else {
        if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product->id ) ) {
            echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">You\'ve already purchased this product! It can only be purchased once.</div></div>';
        }
    }
}
add_action( 'woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31 );

Finally, the sv_render_variation_non_purchasable_message will remain unchanged from our first example — it will still conditionally show or hide the variation-specific message via javascript as needed.

The full snippet for this implementation is here.

Summary

You can prevent repeat purchase with WooCommerce for a specific product or for any product and let customers know why they can’t purchase pretty easily. If you (or your developer) wanted to take this further, you could even:

  • use an array of “no repeats” product IDs to disable repeat purchases for several products at a time.
  • use a category of products that shouldn’t allow repeat purchase
  • use a category of products that should allow repeat purchase (and use this to bail out of the second example)

The woocommerce_is_purchasable filter is definitely a handy one to keep in mind for conditionally allowing any kind of purchase — we use it in plugins like Memberships — and has tons of uses outside of this one.

Disclaimers: As always, this code is “use at your own risk”. Yes, it could be modified to suit your needs, for which we recommend Codeable.

Published by Beka Rice

Beka leads product direction for SkyVerge and technical documentation. She spends a lot of time on research and interviews, but likes to write so she has an excuse to spend more time jamming out to anything from The Clash to Lady Gaga.

40 Comments

  1. Hi Beka,
    Thank you for the article for have different options on woocommerce products. Let me ask you some question:
    I have about 1000 products some i will give the options to buy or to rent for 6 or 12 months.
    For that I use variable products with three variables. Its working fine. What I want is that customer can only buy one of this option and prevent them to buy more than one of this options. As it is now the customer can buy all three options with ones. You understand, you cannot buy or rent the same product with ones.
    how can I prevent that my clients can buy more than one option?
    I use at the moment the same SKU for all three variations
    thank you so much in advance,
    Carsten

    • Should work if you use the parent product ID instead — purchasing one variation of the product should limit purchasing the rest of the variations.

  2. Hello and good day.
    I wanted to know if we could get this amazing script to work with the subscription download extension so subscribers will know they have access and not purchase a product they already have part of their subscription. Thank you 🙂

    Here is the link to the extension I refer to: http://www.woocommerce.com/products/woocommerce-subscription-downloads/

  3. Hello, I just wanted to let you know I caught a small bug. It seems that if we have Woo Subscriptions and a customer cancels and then renews it will not let them renew. Maybe a some code can be added to omit the subscription id product. Thank you 🙂

  4. Hi – what if I allowed people to make like 4 purchases of a product or all products, and then no more. How would I go about that?

  5. Hi, many many thanks for this tutorial it’s really amazing.
    I’ve got a product with three variations: free plan, one year payment, two years payment
    Is it possible to avoid a second purchase only on the first variation? No every year user is able to buy the yearly subscription again?

    I really hope you can help me. Many many thanks again

    • Indeed, the first section covers preventing re-purchase of any specific product 🙂

    • Im looking for the same cenario too.. i want to prevent user to buy again at the hole store. Allow only one purchase of any product per subscription. How could we do this?

      • Hello Beka,
        My requirement is also same as Willy need, I provided the product as free under membership but with limited count , but user can purchase many times as free and by doing this user can crack the limited download count.

        Any Ideas ?

  6. Hi thanks for your answer.
    Is it possible to prevent a user to buy a product if he has already bought another product?
    For example there are two products A and B. If user buys product A he can’t buy product B as well.

    Many thanks

  7. This tutorial is awesome – It’s the only thing out there I’ve found that works. You mentioned in the later part of your tutorial that you could “use a category of products that shouldn’t allow repeat purchase” as well and I’ve been mashing my brains a bit trying to figure out how to make that work. Any chance it’s just an addition of a few key words that you could point me toward? Thanks!

  8. Hey, This question is probably below the level of this tutorial but…. What file do I insert this code into?
    Thanks,

    Brad

  9. Thanks for this wonderful tutorial !

    It’s working great but I wish I can make it works too with translated products. I use a multilingual site where products have their translation. If someone buy a product, i will get the message for the product he bought, but the translation can still be bought.

    Is there a way to to apply this one time purchase restriction to same products whatever the language chosen ? I believe we should get the product ID of the translated purchased product, and apply the same code to that product ID, but I cannot figure it out.

    I tried to get the translated product ID with this code :

    $trid = $sitepress->get_element_trid($post->ID, ‘post_’ . $post->post_type);
    $translations = $sitepress->get_element_translations($trid, ‘post_’ . $post->post_type);

    I’m stuck then trying to merge this piece of code with this tutorial.

    I know it’s probably a WPML related question but any help would be very appreciate.

    Thanks !

  10. I need to make this so it only allows a single purchase of an item every year. So basically, I need to set it up so it resets a year after the initial purchase. Seems like the this tutorial gets you
    90% of the way there.

  11. Which folder I have to put the full snippet and what I have to do next?

  12. Has anyone had any luck with configuring a conditional for the re-purchasing to disabled for a single category?

  13. I’ve given this a try for a client, but unfortunately, while it does show me the really nice message on the product page (and only if I’m on the individual product page), that doesn’t stop me from adding it to my cart and processing the checkout. it doesn’t really seem to prevent it, it just shows the message.

    It’s a 1 day free trial. But I was able to order it two more times, so now my 1 day free trial is 3 days. Is there any way to:

    Get it to appear on the grid display also above or below the “add to cart” button or gray out the add-to-cart if they’ve already purchased it.
    Not allow them to add it to their cart at all and/or have it not process their checkout if that is in the cart?

    Thank you!

    • Apologies, I’m daft. I wasn’t clear that I needed the first part and the second part to accomplish this. 🙂 I’ve got it sorted all out. Thank you for this!

  14. WordPress in debug mode give me notice “Notice: Trying to get property of non-object” to line if ( wc_customer_bought_product( get_current_user()->user_email, get_current_user_id(), $product_id ) ) { $purchasable = false; }

  15. I attempted this solution and while it worked for a while, recently, it seems to get confused on which user is logged in. I figured this out by printing out the logged in user’s email address for a brief time. We were flooded with responses of, “That’s not my email address”. This seems to be the root of the issue. Have you seen or heard of this?

    • Hi Bobby, are you perhaps now implementing a caching solution or plugin? This post was updated to fix a couple usages of wp_get_current_user(), but this wouldn’t just return the wrong email completely, so caching sounds like the culprit here. I’d update the code with the gist linked at the bottom, and if you still see this issue, disable caching plugins or use a staging site without caching from your host to confirm this is the issue.

      • Hi Beka,
        I’m not strong on code…is this limiting for logged in users only, or can it work for guest checkouts based on email address?

        • Hi Scott, for a guest user we don’t know any of their information as they’re browsing the site, so there’s nothing to check the purchase against. In this case, only logged-in users are checked as a result since we have their information.

  16. Much appreciated Beka!!!
    Thanks for the code! hope we see more of these cool snippets!

  17. Hi there,

    I’m wondering if you can give an explanation on how to do this with multiple product IDs? I keep breaking my site and I’m unable to figure out how to do it.

    Thank you.

  18. Hi,

    I am wondering why one would lke to show “non-purchasable” products in a store? That would make more sense than just adding a note.

    I would like to hide “non-purchasable” products. Anyone knows how to?

  19. Hi Beka,
    Wonderful stuff here.
    My question is : What happens in the case the returning costumer adds the product in the cart and he decides to login right on cart page? While moving to checkout the product will be removed?
    I also use a function that adds the free limiting product automatic if a specific product is added.
    So my flow is :
    User first time adds a product and also gets a free product (the one I want to limit)
    If he returns again and adds the regular product in the cart the free will be added automatically by the function i have but hopefully will be removed from yours.
    Or is there a better way to achieve this?
    Many thank in advance.

    • Hi Shree, the product is removed once the customer logs in, as WooCommerce will run a check for the products being purchasable again: http://cloud.skyver.ge/0Z02151o3Q2m

      As for the second part, not sure about that being removed, as it depends on how the free product added in the first place. I don’t see a reason this code wouldn’t block purchase in that scenario, but still worth a test before putting it in production 🙂

  20. Beka,
    Thanks so much for this. I’m trying to get the store to render a price of zero instead of disabling the button completely, currently the implementation of this breaks group product pricing as there is no price printing. Any ideas or help?

  21. Such a helpful article. Thanks a tonne for your help.

  22. Hi there, So just a couple of questions and please forgive my ignorance but I am still a fairly fresh user.

    Firstly – could I just copy and paste the above code (preventing all items) and this should work or will it require customisation to work with my site.

    Secondly – Where would I place this code in my Child theme? Would it just be in the functions.php file of do I need to create a subfolder within a WooCommerce folder within the child theme?

  23. Thanks for this article, it’s proving to be very helpful. However I have got a bit stuck and need a point clarifying. When I set the products ID to a whole product things work fine, however I need this to work for a “free trial” variable product, something you say is possible. However when I’ve used the variation ID instead of the product ID nothing happens. Am I making a mistake adding my products variable ID to the following line?

    $non_purchasable = 8486;

    To clarify, this is the ID of the specific variable, not the product ID.

    • Hi Troy,

      I’m stuck elsewhere but I’m pretty sure I can help you here.

      Yes the code goes in your child theme’s functions.php file. You would then need to tweak the code provided to add your specific product ID. This should be entered below the following line of text in the above code provided:
      “Enter the ID of the product that shouldn’t be purchased again”.

      The number to add should be in your woocommerce back office, just go to your products page and hover over your chosen product and look for the number next to “ID:”

      Hope that helps!

  24. Thanks for sharing this tutorial.

  25. I had the same problem, solved it via several pages, here the result

    /**
    * Disables repeat purchase for products / variations
    *
    * @param bool $purchasable true if product can be purchased
    * @param \WC_Product $product the WooCommerce product
    * @return bool $purchasable the updated is_purchasable check
    */
    function sv_disable_repeat_purchase( $purchasable, $product ) {
    // Don’t run on parents of variations,
    // function will already check variations separately
    if ( $product->is_type( ‘variable’ ) ) {
    return $purchasable;
    }

    // Get the ID for the current product (passed in)
    $product_id = $product->is_type( 'variation' ) ? $product->variation_id : $product->id;

    // return false if the customer has bought the product / variation
    //if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product_id ) ) {
    // $purchasable = false;
    //}
    // https://wpml.org/forums/topic/get-the-translated-products-id-from-default-id/
    global $sitepress;
    $translated_ids = Array();
    if(!isset($sitepress)) return;
    $post_id = $product->id; //34; // Your original product ID
    $trid = $sitepress->get_element_trid($post_id, 'post_product');
    $translations = $sitepress->get_element_translations($trid, 'product');
    foreach( $translations as $lang=>$translation){
    $translated_ids[] = $translation->element_id;
    }
    //print_r($translated_ids);
    //http://stackoverflow.com/questions/27306828/how-to-use-wc-customer-bought-product-function-to-check-if-customer-bought-produ
    foreach($translated_ids as $item):
    //if ( wc_customer_bought_product( $customer_email, $user_id, $item) )
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $item) ) {
    // return true;
    $purchasable = false;
    break;
    }
    endforeach;
    //return false;

    // Double-check for variations: if parent is not purchasable, then variation is not
    if ( $purchasable && $product->is_type( 'variation' ) ) {
    $purchasable = $product->parent->is_purchasable();
    }

    return $purchasable;

    }
    add_filter( ‘woocommerce_is_purchasable’, ‘sv_disable_repeat_purchase’, 10, 2 );

    /**
    * Shows a “purchase disabled” message to the customer
    */
    function sv_purchase_disabled_message() {

    // Get the current product to see if it has been purchased
    global $product;

    if ( $product->is_type( 'variable' ) ) {

    foreach ( $product->get_children() as $variation_id ) {
    // Render the purchase restricted message if it has been purchased
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $variation_id ) ) {
    sv_render_variation_non_purchasable_message( $product, $variation_id );
    }
    }

    } else {
    // https://wpml.org/forums/topic/get-the-translated-products-id-from-default-id/
    global $sitepress;
    $translated_ids = Array();
    if(!isset($sitepress)) return;
    $post_id = $product->id; //34; // Your original product ID
    $trid = $sitepress->get_element_trid($post_id, 'post_product');
    $translations = $sitepress->get_element_translations($trid, 'product');
    foreach( $translations as $lang=>$translation){
    $translated_ids[] = $translation->element_id;
    }
    //print_r($translated_ids);
    //if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $product->id ) ) {
    // echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">You\'ve already purchased this product! It can only be purchased once.</div></div>';
    //}
    //http://stackoverflow.com/questions/27306828/how-to-use-wc-customer-bought-product-function-to-check-if-customer-bought-produ
    foreach($translated_ids as $item):
    if ( wc_customer_bought_product( wp_get_current_user()->user_email, get_current_user_id(), $item) ) {
    echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message">You\'ve already purchased this product! It can only be purchased once.</div></div>';
    break;
    }
    endforeach;
    }

    }
    add_action( ‘woocommerce_single_product_summary’, ‘sv_purchase_disabled_message’, 31 );

    /**
    * Generates a “purchase disabled” message to the customer for specific variations
    *
    * @param \WC_Product $product the WooCommerce product
    * @param int $no_repeats_id the id of the non-purchasable product
    */
    function sv_render_variation_non_purchasable_message( $product, $no_repeats_id ) {

    // Double-check we're looking at a variable product
    if ( $product->is_type( 'variable' ) && $product->has_child() ) {

    $variation_purchasable = true;

    foreach ( $product->get_available_variations() as $variation ) {

    // only show this message for non-purchasable variations matching our ID
    if ( $no_repeats_id === $variation['variation_id'] ) {
    $variation_purchasable = false;
    echo '<div class="woocommerce"><div class="woocommerce-info wc-nonpurchasable-message js-variation-' . sanitize_html_class( $variation['variation_id'] ) . '">You\'ve already purchased this product! It can only be purchased once.</div></div>';
    }
    }
    }

    if ( ! $variation_purchasable ) {
    wc_enqueue_js("
    jQuery('.variations_form')
    .on( 'woocommerce_variation_select_change', function( event ) {
    jQuery('.wc-nonpurchasable-message').hide();
    })
    .on( 'found_variation', function( event, variation ) {
    jQuery('.wc-nonpurchasable-message').hide();
    if ( ! variation.is_purchasable ) {
    jQuery( '.wc-nonpurchasable-message.js-variation-' + variation.variation_id ).show();
    }
    })
    .find( '.variations select' ).change();
    ");
    }

    }

  26. i want to prevent user to add to cart a same product more than one time in a same transaction, means once transaction is complete product is available for add to cart but at a time user cant add same product twice in a cart, how can i do this?

    Thanks,
    John.

  27. Hi Beka,

    I have bundle products which contains 5 simple products. So suppose Cusomer have added in cart that bundle product then customer can’t add simple products which is already in bundle. any idea which filter i can use for that ?

    Thanks
    Ahir

Hmm, looks like this article is quite old! Its content may be outdated, so comments are now closed.