Check Out

Is it possible to block customers from purchasing a product on its own?

For example, if a client adds only a diamond (without a ring setting) to the cart and proceeds to checkout, can the system automatically stop them and show a message prompting them to choose a ring setting before they can complete the purchase?

You can block checkout progress using Checkout Blocks or a custom checkout extension app if you need more advanced logic.

ptz0n’s suggestions are solid for stopping checkout mid-flow, but if you want to catch this earlier (before the customer even reaches checkout), a lighter option is adding a small JavaScript validation to your cart page or drawer. The idea is: when someone clicks “Proceed to Checkout,” the script checks the cart items and, if it finds a diamond product without a matching ring setting, it prevents navigation and shows an inline message instead. No app needed, just a bit of custom code in your theme.

The trickier part is how you identify which products “need” a companion. A clean way to handle it is to tag the diamonds with something like requires-setting in the product admin, then use the cart’s line item properties or product tags to run the check. That way if you add more standalone products in the future, you just tag them and the logic applies automatically.

If you’re on Shopify Plus or want a more robust solution, the checkout extension route (using useBuyerJourneyIntercept) is more reliable because it enforces the rule server-side - customers can’t bypass it by going directly to the checkout URL. There’s a related thread here about that approach getting bypassed with PayPal Express, worth keeping in mind if you go that route.

For a no-code middle ground, some “forced bundle” or “required add-on” apps on the App Store are specifically built for this kind of paired product logic and might save you the dev time.

Hi @tracy_xoxo — for the requirement in your example, set up two separate collections: Diamonds and Eligible ring settings. Block checkout when Diamonds is present AND Eligible ring settings is absent.

That can display: “Please choose a ring setting for your diamond, or remove the diamond to continue.” Adding another diamond or an unrelated accessory should not satisfy the rule, so keep only qualifying settings in the second collection.

Before enabling it, test a diamond alone, a diamond with a setting, and that same cart after removing the setting. Also test the checkout buttons and payment paths your store actually offers.

For jewellery, there is an important distinction: this presence rule establishes that a setting is in the cart. It does not establish that the setting fits the diamond, or that two diamonds have two settings. If you need shape/size compatibility or one-to-one quantities, that requires additional pairing logic.

Disclosure: I develop King Checkout Validation, which supports the collection-based checkout rule above. A ring-builder interface or earlier cart-page guidance would be a separate part of the shopping experience.

One technical correction to the earlier implementation advice: useBuyerJourneyIntercept is a Checkout UI extension hook, not server-side validation. Shopify deprecated it starting with API version 2026-07 and now recommends a Cart and Checkout Validation Function for merchant business rules. That Function runs on Shopify’s servers and applies across checkout surfaces, including express wallets.

The collection rule GetAllTool described is technically feasible. A validation Function can check whether a cart-line product belongs to specified collections, so the simple rule can be:

  • At least one product belongs to Diamonds.
  • No product belongs to Eligible ring settings.
  • If both are true, block checkout with the message already suggested.

There is one important plan distinction. Stores on any plan can use a public App Store app containing Shopify Functions. A custom app containing Shopify Functions requires Shopify Plus. So a non-Plus merchant can use a public validation app, but cannot simply build and install a one-off custom Function app. Whether the public app is free or paid depends on that app.

Cart-page JavaScript can still give the customer an earlier explanation, but it should be treated as UX rather than the enforcement layer. The fit and one-to-one quantity limitations are already covered well above.

–
Cuong, founder of Trooix